【问题标题】:Is there better way to display entire Spark SQL DataFrame?有没有更好的方法来显示整个 Spark SQL DataFrame?
【发布时间】:2015-07-27 15:58:30
【问题描述】:

我想使用 Scala API 显示整个 Apache Spark SQL DataFrame。我可以使用show() 方法:

myDataFrame.show(Int.MaxValue)

有没有比使用Int.MaxValue 更好的方法来显示整个DataFrame?

【问题讨论】:

标签: scala apache-spark apache-spark-sql


【解决方案1】:

试试看,

df.show(35, false)

它将显示具有完整值名称的 35 行和 35 列值。

【讨论】:

    【解决方案2】:

    一种方法是使用count()函数获取记录总数并使用show(rdd.count())

    【讨论】:

      【解决方案3】:

      正如其他人所建议的,打印出整个 DF 是个坏主意。但是,您可以使用df.rdd.foreachPartition(f) 逐个分区打印出驱动程序 JVM(y 使用 collect)

      【讨论】:

      • 能否提供一些示例代码? f() 函数中的打印语句不会打印到工作人员的标准输出,而不是驱动程序/您的 shell 会话的标准输出吗?另见stackoverflow.com/a/28804763/215945
      【解决方案4】:

      java 中我尝试了两种方法。 这对我来说非常有用:

      1.

      data.show(SomeNo);
      

      2.

      data.foreach(new ForeachFunction<Row>() {
                      public void call(Row arg0) throws Exception {
                          System.out.println(arg0);
                      }
                  });
      

      【讨论】:

        【解决方案5】:

        我已经尝试过 show() 并且有时它似乎有效。但有时不起作用,请尝试一下:

        println(df.show())
        

        【讨论】:

          【解决方案6】:

          通常不建议将整个 DataFrame 显示到 stdout,因为这意味着您需要将整个 DataFrame(其所有值)拉到驱动程序(除非 DataFrame 已经是本地的,您可以使用 @ 检查987654322@).

          除非您提前知道数据集的大小足够小,以至于驱动程序 JVM 进程有足够的可用内存来容纳所有值,否则这样做是不安全的。这就是为什么 DataFrame API 的 show() 默认只显示前 20 行的原因。

          您可以使用返回Array[T]df.collect,然后遍历每一行并打印出来:

          df.collect.foreach(println)
          

          但是您丢失了在 df.showString(numRows: Int) 中实现的所有格式(show() 内部使用)。

          所以不,我想没有更好的办法。

          【讨论】:

          • df.toJSON.collect.foreach(println) 更好
          • 但不收集也将整个DataFrame拉到驱动程序中?
          【解决方案7】:

          没有比这更简洁的了,但如果你想避免Int.MaxValue,那么你可以使用collect 并处理它,或者foreach。但是,对于没有太多手动代码的表格格式,show 是您能做的最好的。

          【讨论】:

            猜你喜欢
            • 2019-07-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-14
            • 1970-01-01
            相关资源
            最近更新 更多