我想用Scala API显示整个Apache Spark SQL dataframe。我可以使用show()
方法:
myDataFrame.show(Int.MaxValue)
是否有一种更好的方式显示整个数据框架,而不是使用Int.MaxValue
?
通常不建议将整个数据框显示给stdout,因为这意味着您需要将整个dataframe(所有值)拉到驱动程序(除非DataFrame
已经是本地,否则您可以使用df.isLocal
)。
,除非您提前知道数据集的大小足够小,以便驱动程序JVM进程具有足够的内存来容纳所有值,那么这样做是不安全的。这就是为什么DataFrame API的show()
默认情况下仅显示前20行。
您可以使用返回Array[T]
的df.collect
,然后在每行上迭代并打印它:
df.collect.foreach(println)
但是您将失去df.showString(numRows: Int)
中实现的所有格式(show()
内部使用)。
所以不,我想没有更好的方法。
一种方法是使用count()
功能获取记录总数并使用show(rdd.count())
。
尝试,
df.show(35, false)
它将显示35行和35列值,具有完整值名称。
正如其他人建议的那样,打印整个DF是坏主意。但是,您可以使用df.rdd.foreachPartition(f)
在不泛滥驱动程序JVM(y使用Collect)
没有什么比这更简洁了,但是如果您想避免使用Int.MaxValue
,则可以使用collect
并处理它,或者foreach
。但是,对于没有多手动代码的表格格式,show
是您可以做的最好的。
在java
中,我以两种方式尝试了它。这对我来说非常有效:
1。
data.show(SomeNo);
2。
data.foreach(new ForeachFunction<Row>() {
public void call(Row arg0) throws Exception {
System.out.println(arg0);
}
});
我已经尝试过 show(),有时似乎有效。但是有时不起作用,请尝试一下:
println(df.show())