web-dev-qa-db-ja.com

Spark SQL DataFrame全体を表示するより良い方法はありますか?

Apache Spark SQL DataFrame全体をScala AP​​Iで表示したいと思います。 show()メソッドを使用できます。

myDataFrame.show(Int.MaxValue)

Int.MaxValueを使用するよりも、DataFrame全体を表示するより良い方法はありますか?

33
Yuri Brovman

通常、DataFrame全体をstdoutに表示することはお勧めしません。これは、DataFrame全体(そのすべての値)をドライバーにプルする必要があることを意味します(DataFrameが既にローカルである場合は、df.isLocal)。

データセットのサイズが十分に小さく、ドライバーJVMプロセスがすべての値を収容するのに十分なメモリーを使用できることを事前に知らない限り、これを行うのは安全ではありません。そのため、DataFrame APIのshow()にはデフォルトで最初の20行のみが表示されます。

df.collectを返すArray[T]を使用してから、各行を反復処理して出力できます。

df.collect.foreach(println)

ただし、df.showString(numRows: Int)(_show()が内部的に使用する)で実装されているすべてのフォーマットは失われます。

だから、これ以上良い方法はないと思います。

58
Grega Kešpret

1つの方法は、count()関数を使用してレコードの総数を取得し、show(rdd.count())を使用することです。

3
AkshayK

他の人が示唆したように、DF全体を印刷するのは悪い考えです。ただし、df.rdd.foreachPartition(f)を使用して、ドライバーJVMをあふれさせることなく、パーティションごとに印刷できます(yはcollectを使用)

2
ayan guha

それより簡潔なものはありませんが、Int.MaxValueを避けたい場合は、collectを使用して処理するか、foreachを使用できます。ただし、手作業のコードがあまりない表形式の場合、showが最善です。

1
Justin Pihony

Javaでは、2つの方法で試しました。これは私にとって完璧に機能しています:

1。

data.show(SomeNo);

2。

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

で試して、

df.show(35、false)

完全な値の名前で35行と35列の値が表示されます。

0
Suresh G