有没有更好的方法来显示整个 Spark SQL DataFrame?

Is there better way to display entire Spark SQL DataFrame?

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

myDataFrame.show(Int.MaxValue)

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

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

通常不建议将整个 DataFrame 显示到标准输出,因为这意味着您需要将整个 DataFrame(其所有值)拉到驱动程序(除非 DataFrame 已经是本地的,您可以用 df.isLocal).

检查

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

您可以使用 df.collect which returns Array[T] 然后遍历每一行并打印它:

df.collect.foreach(println)

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

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

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

我已经尝试过 show() 并且它有时似乎有效。但有时不行,试一试:

println(df.show())

java我试过两种方法。 这对我来说非常有效:

1.

data.show(SomeNo);

2.

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

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

试试,

df.show(35, 假)

它将显示 35 行和 35 列的值以及完整的值名称。