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(具有非唯一键值)和自定义值操作的主要内容,如果未能解决你的问题,请参考以下文章

java的怎么操作spark的dataframe

[Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子

spark dataframe 怎么去除第一行数据

如何打印 spark dataframe

[Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:

Spark编程--Spark SQL DataFrame