开发者社区> 问答> 正文

将Spark org.apache.spark.sql.Dataset#show()的输出作为字符串获取?

有没有办法检索Dataset#show()String 的输出?

以下打印到stdout,但我想知道我是否可以将其作为String检索并更好地记录:

val foobarData: DataFrame = ...

println("+++ foobarData.show(): +++")
foobarData.show()

展开
收起
社区小助手 2018-12-19 16:57:01 3126 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    目前没有办法做到这一点,除非提供一个“访问者”,即包中的一段代码org.apache.spark.sql,它将使用包私有API:

    package org.apache.spark.sql

    object ShowAccessor {
    def show(ds: Dataset[_]): String = ds.showString(20)
    }
    您可能希望能够指定一组不同的参数(showString另外两个参数具有默认值),但总体思路保持不变。

    或者,您可以使用反射执行上述操作,但它需要更多代码(特别是使用Scala反射),因此我个人更喜欢访问器方法。

    但这种方法可能不适用于Java 9+(当然,一旦Spark最终支持它),因为Java 9+比Java 8及更早版本更严格地强制执行模块边界。在这种情况下,可能需要使用反射访问此API。

    2019-07-17 23:23:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载

相关镜像