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

pkwftd7m  于 2022-11-09  发布在  Scala
关注(0)|答案(7)|浏览(179)

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

myDataFrame.show(Int.MaxValue)

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

3qpi33ja

3qpi33ja1#

通常不建议将整个DataFrame显示到stdout,因为这意味着您需要将整个DataFrame(其所有值)拉到驱动程序(除非DataFrame已经是本地的,您可以使用df.isLocal进行检查)。
除非您事先知道数据集的大小足够小,以便驱动程序JVM进程有足够的可用内存来容纳所有值,否则这样做是不安全的。这就是为什么DataFrame API的show()默认只显示前20行的原因。
您可以使用df.collect,它返回Array[T],然后迭代每一行并打印出来:

df.collect.foreach(println)

但是您将丢失在df.showString(numRows: Int)(show()内部使用)中实现的所有格式。
所以不,我想没有更好的办法了。

csga3l58

csga3l582#

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

xdnvmnnf

xdnvmnnf3#

试一试,

df.show(35, false)

它将显示35行35列值和全值名称。

wlp8pajw

wlp8pajw4#

正如其他人建议的那样,打印出整个df不是一个好主意。但是,您可以使用df.rdd.foreachPartition(f)逐个分区打印,而不会泛洪驱动程序JVM(y使用Collect)

yvfmudvl

yvfmudvl5#

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

cgyqldqp

cgyqldqp6#

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

1.

data.show(SomeNo);

2.

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

kuuvgm7e7#

我试过show(),有时似乎很管用。但有时行不通,试一试吧:

println(df.show())

相关问题