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

Yur*_*man 36 scala apache-spark apache-spark-sql

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

myDataFrame.show(Int.MaxValue)
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*ret 60

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

除非您提前知道数据集的大小足够小,以便驱动程序JVM进程有足够的内存可用于容纳所有值,否则执行此操作并不安全.这就是show()默认情况下DataFrame API 仅显示前20行的原因.

您可以使用df.collect返回的内容Array[T]然后遍历每一行并打印它:

df.collect.foreach(println)
Run Code Online (Sandbox Code Playgroud)

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

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

  • `df.toJSON.collect.foreach(println)` 更好 (2认同)
  • 但不收集还会将整个DataFrame拉到驱动程序吗? (2认同)

小智 5

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