2016-06-22 10 views
0

私はSpark 1.5.0でコードを持っています。spark dataframe reducebykey(一意でないキー値)とカスタム値の操作

ケースクラスmyCaseClass(user_idは:文字列、説明:文字列)

ここでは私のUDF

ここ
val getConcatenated = udf((first: String, second: String, third: String) => { first + " " + second + " " + third}) 

である私がしたい私は今、私のデータフレーム

val df_description = df.withColumn("description",getConcatenated(col("text1"), col("text2"), col("weight"))).select("user_id","description") 

を生成するところであり、列を持つこのDFに対してreduceeByKey操作を実行します(両方とも文字列です)。私のuser_idsは一意ではなく、与えられたuser_idのすべての値/記述項目を連結したいと思います。

どうすれば実現できますか?

私はこのような何か行うことができます。

val description_rdd = df_description.map(row => myCaseClass(row.getString(0), row.getString(1))) 

をしかし、どのように私はここpairedrddを生成していますか?次に、rddでCreateDataFrameメソッドを使用して、データフレームに戻したいと思っています。

答えて

0

次のコードは、あなたのキー列とあなたの説明の順序を保持するカラムでDFを作成します。

import org.apache.spark.rdd.PairRDDFunctions 

val pairRDD : PairRDDFunctions[String, String] = df_description.rdd.map(row => (row.getString(0), row.getString(1))) 
val groupedRDD = pairRDD.groupByKey().map(p => (p._1, p._2.toSeq)) 
val groupedDF = groupedRDD.toDF() 
関連する問題