spark dataframe reducebykey(具有非唯一键值)和自定义值操作

时间:2016-06-22 22:19:20

标签: apache-spark apache-spark-sql spark-dataframe

我有Spark 1.5.0的代码。

case class myCaseClass(user_id:String,description:String)

这是我的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上进行redueByKey操作。我的user_ids不是唯一的,我想连接给定user_id的所有值/描述条目。

我怎样才能实现这一目标?

我可以这样做:

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

但是如何在这里生成pairedrdd?然后我想通过在rdd。

上使用CreateDataFrame方法回到数据框

1 个答案:

答案 0 :(得分: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()