我有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方法回到数据框答案 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()