2016-09-28 16 views
0

各データフレームパーティションの最初の要素を取得する必要があります。 mapPartitionsを使用する必要があることはわかっていますが、使用方法はわかりません。各データフレームパーティションの最初の要素Spark 2.0

注:Spark2.0を使用しています。データフレームがソートされています。

答えて

1

は、私はそれが次のようになりますと信じて:

import org.apache.spark.sql.catalyst.encoders.RowEncoder 
... 
implicit val encoder = RowEncoder(df.schema) 
val newDf = df.mapPartitions(iterator => iterator.take(1)) 

は、このデータフレームの各パーティションから1つの要素がかかります。次に、あなたのドライバすなわちにすべてのデータを収集することができます。:

nedDf.collect() 

これはあなたのパーティションの数と同じ要素数の配列を返します。私はここにhttp://spark.apache.org/docs/latest/api/java/org/apache/spark/sqlメソッドのシグネチャで探していますスパーク2.0

+0

をサポートするために更新さ

UPD /Dataset.htmlそして、このメソッド呼び出しで2番目のパラメータとしてEncoderが必要なのではないですか? – MaxNevermind

+0

このソリューションを試してみると、spar.implicitsを使用していても、「データセットに格納されている型のエンコーダを見つけることができず、プリミティブ型(Int、Stringなど)および製品型(ケースクラス)はspark.implicits.エラーが続く – syl

+0

mapPartitionsをforeachPartitionに置き換えると、空のリスト()が返されます – syl

関連する問題