我想用Scala API显示整个ApacheSpark SQL DataFrame。我可以使用show()方法:
show()
myDataFrame.show(Int.MaxValue)
有没有比使用Int.MaxValue更好的显示整个DataFrame的方法?
Int.MaxValue
3qpi33ja1#
通常不建议将整个DataFrame显示到stdout,因为这意味着您需要将整个DataFrame(其所有值)拉到驱动程序(除非DataFrame已经是本地的,您可以使用df.isLocal进行检查)。除非您事先知道数据集的大小足够小,以便驱动程序JVM进程有足够的可用内存来容纳所有值,否则这样做是不安全的。这就是为什么DataFrame API的show()默认只显示前20行的原因。您可以使用df.collect,它返回Array[T],然后迭代每一行并打印出来:
DataFrame
df.isLocal
df.collect
Array[T]
df.collect.foreach(println)
但是您将丢失在df.showString(numRows: Int)(show()内部使用)中实现的所有格式。所以不,我想没有更好的办法了。
df.showString(numRows: Int)
csga3l582#
一种方法是使用count()函数获取记录总数,并使用show(rdd.count())。
count()
show(rdd.count())
xdnvmnnf3#
试一试,
df.show(35, false)
它将显示35行35列值和全值名称。
wlp8pajw4#
正如其他人建议的那样,打印出整个df不是一个好主意。但是,您可以使用df.rdd.foreachPartition(f)逐个分区打印,而不会泛洪驱动程序JVM(y使用Collect)
df.rdd.foreachPartition(f)
yvfmudvl5#
没有比这更简洁的了,但是如果您想避免使用Int.MaxValue,那么您可以使用collect并处理它,或者使用foreach。但是,对于没有太多手动代码的表格格式,show是最好的选择。
collect
foreach
show
cgyqldqp6#
在java中,我尝试了两种方法。这对我来说非常有效:
java
1.
data.show(SomeNo);
2.
data.foreach(new ForeachFunction<Row>() { public void call(Row arg0) throws Exception { System.out.println(arg0); } });
kuuvgm7e7#
我试过show(),有时似乎很管用。但有时行不通,试一试吧:
println(df.show())
7条答案
按热度按时间3qpi33ja1#
通常不建议将整个DataFrame显示到stdout,因为这意味着您需要将整个DataFrame(其所有值)拉到驱动程序(除非
DataFrame
已经是本地的,您可以使用df.isLocal
进行检查)。除非您事先知道数据集的大小足够小,以便驱动程序JVM进程有足够的可用内存来容纳所有值,否则这样做是不安全的。这就是为什么DataFrame API的
show()
默认只显示前20行的原因。您可以使用
df.collect
,它返回Array[T]
,然后迭代每一行并打印出来:但是您将丢失在
df.showString(numRows: Int)
(show()
内部使用)中实现的所有格式。所以不,我想没有更好的办法了。
csga3l582#
一种方法是使用
count()
函数获取记录总数,并使用show(rdd.count())
。xdnvmnnf3#
试一试,
它将显示35行35列值和全值名称。
wlp8pajw4#
正如其他人建议的那样,打印出整个df不是一个好主意。但是,您可以使用
df.rdd.foreachPartition(f)
逐个分区打印,而不会泛洪驱动程序JVM(y使用Collect)yvfmudvl5#
没有比这更简洁的了,但是如果您想避免使用
Int.MaxValue
,那么您可以使用collect
并处理它,或者使用foreach
。但是,对于没有太多手动代码的表格格式,show
是最好的选择。cgyqldqp6#
在
java
中,我尝试了两种方法。这对我来说非常有效:1.
2.
kuuvgm7e7#
我试过show(),有时似乎很管用。但有时行不通,试一试吧: