spark dataframe reducebykey(具有非唯一键值)和自定义值操作
Posted
技术标签:
【中文标题】spark dataframe reducebykey(具有非唯一键值)和自定义值操作【英文标题】:spark dataframe reducebykey (with non-unique key values) and custom value operation 【发布时间】:2016-06-22 22:19:20 【问题描述】:我有 Spark 1.5.0 的代码。
案例类 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_id 不是唯一的,我想连接给定 user_id 的所有值/描述条目。
我怎样才能做到这一点?
我可以这样做:
val description_rdd = df_description.map(row => myCaseClass(row.getString(0), row.getString(1)))
但是我如何在这里生成pairrdd?然后我想通过在 rdd 上使用 CreateDataFrame 方法切换回数据帧。
【问题讨论】:
【参考方案1】:以下代码将使用您的键列和一个包含您的描述序列的列创建 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()
【讨论】:
以上是关于spark dataframe reducebykey(具有非唯一键值)和自定义值操作的主要内容,如果未能解决你的问题,请参考以下文章
[Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子