2017-02-27 4 views
0

で複数の行をカウントし、マージ、私は、このデータセットで終わる:は、Spark DATSETを変換 - いくつかのデータ処理の後ID

Dataset<Row> counts //ID,COUNT,DAY_OF_WEEK 

今、私はこのフォーマットにこれを変換し、CSVとして保存する:

JavaPairRDD<Long, Map<Integer, Integer>> r = counts.toJavaRDD().mapToPair(...) 
JavaPairRDD<Long, Map<Integer, Integer>> merged = r.reduceByKey(...); 

サイズのその「ID」のペアとリスト7:

ID,COUNT_DoW1, ID,COUNT_DoW2, ID,COUNT_DoW3,..ID,COUNT_DoW7 

は、私は次のいずれかの方法を考えることができますJavaPairRDDを入手したら、それをcsvに保存できます。それをRDDに変換せずにこの変換のためのより簡単なアプローチがありますか?

答えて

0

struct関数を使用して、cntとdayからペアを作成し、collect_listでgroupbyを実行することができます。 このような何か(スカラ座がありますが、簡単にJavaに変換することができます):

df.groupBy("ID").agg(collect_list(struct("COUNT","DAY"))) 

は今、あなたは、関連する列を抽出UDFを書くことができます。したがって、単純にループ内でwithColumnを実行するだけで(df.withColumn( "id2"、col( "id")))

あなたは位置iからカウント要素を抽出して実行するUDFを作成しますそれはすべての列にあり、最後には同じです。

あなたが望む順序を保ち、無関係な列を削除した場合、あなたが求めたものが得られます。

あなたはまた、(Scalaで再びしかし、あなたは簡単にJavaに変換することができるはずです)ピボットコマンドを使用して作業することができます:

df.show() 
>>+---+---+---+ 
>>| id|cnt|day| 
>>+---+---+---+ 
>>|333| 31| 1| 
>>|333| 32| 2| 
>>|333|133| 3| 
>>|333| 34| 4| 
>>|333| 35| 5| 
>>|333| 36| 6| 
>>|333| 37| 7| 
>>|222| 41| 4| 
>>|111| 11| 1| 
>>|111| 22| 2| 
>>|111| 33| 3| 
>>|111| 44| 4| 
>>|111| 55| 5| 
>>|111| 66| 6| 
>>|111| 77| 7| 
>>|222| 21| 1| 
>>+---+---+---+ 

val df2 = df.withColumn("all",struct('id, 'cnt' 'day)) 

val res = .groupBy("id").pivot("day").agg(first('all).as("bla")).select("1.*","2.*","3.*", "4.*", "5.*", "6.*", "7.*") 

res.show() 
>>+---+---+---+----+----+----+----+----+----+---+---+---+----+----+----+----+----+----+----+----+----+ 
>>| id|cnt|day| id| cnt| day| id| cnt| day| id|cnt|day| id| cnt| day| id| cnt| day| id| cnt| day| 
>>+---+---+---+----+----+----+----+----+----+---+---+---+----+----+----+----+----+----+----+----+----+ 
>>|333| 31| 1| 333| 32| 2| 333| 133| 3|333| 34| 4| 333| 35| 5| 333| 36| 6| 333| 37| 7| 
>>|222| 21| 1|null|null|null|null|null|null|222| 41| 4|null|null|null|null|null|null|null|null|null| 
>>|111| 11| 1| 111| 22| 2| 111| 33| 3|111| 44| 4| 111| 55| 5| 111| 66| 6| 111| 77| 7| 
>>+---+---+---+----+----+----+----+----+----+---+---+---+----+----+----+----+----+----+----+----+----+ 
関連する問題