Apache Spark SQL DataFrame全体をScala APIで表示したいと思います。 show()
メソッドを使用できます。
myDataFrame.show(Int.MaxValue)
Int.MaxValue
を使用するよりも、DataFrame全体を表示するより良い方法はありますか?
通常、DataFrame全体をstdoutに表示することはお勧めしません。これは、DataFrame全体(そのすべての値)をドライバーにプルする必要があることを意味します(DataFrame
が既にローカルである場合は、df.isLocal
)。
データセットのサイズが十分に小さく、ドライバーJVMプロセスがすべての値を収容するのに十分なメモリーを使用できることを事前に知らない限り、これを行うのは安全ではありません。そのため、DataFrame APIのshow()
にはデフォルトで最初の20行のみが表示されます。
df.collect
を返すArray[T]
を使用してから、各行を反復処理して出力できます。
df.collect.foreach(println)
ただし、df.showString(numRows: Int)
(_show()
が内部的に使用する)で実装されているすべてのフォーマットは失われます。
だから、これ以上良い方法はないと思います。
1つの方法は、count()
関数を使用してレコードの総数を取得し、show(rdd.count())
を使用することです。
他の人が示唆したように、DF全体を印刷するのは悪い考えです。ただし、df.rdd.foreachPartition(f)
を使用して、ドライバーJVMをあふれさせることなく、パーティションごとに印刷できます(yはcollectを使用)
それより簡潔なものはありませんが、Int.MaxValue
を避けたい場合は、collect
を使用して処理するか、foreach
を使用できます。ただし、手作業のコードがあまりない表形式の場合、show
が最善です。
Java
では、2つの方法で試しました。これは私にとって完璧に機能しています:
1。
data.show(SomeNo);
2。
data.foreach(new ForeachFunction<Row>() {
public void call(Row arg0) throws Exception {
System.out.println(arg0);
}
});
で試して、
df.show(35、false)
完全な値の名前で35行と35列の値が表示されます。