当前位置: 首页 > 知识库问答 >
问题:

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

艾敏学
2023-03-14

我有Spark 1.5.0的代码。

案例类myCaseClass(user\u id:String,description:String)

这是我的自定义项

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\u id不是唯一的,我希望包含给定user\u id的所有值/描述条目。

我怎样才能做到这一点?

我可以做这样的事情:

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

但是我如何在这里生成一个Pairedrdd?然后我想通过在rdd上使用CreateDataFrame方法返回数据帧。

共有1个答案

顾光明
2023-03-14

下面的代码将使用键列和包含描述序列的列创建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()
 类似资料:
  • 问题内容: 我需要一个可以根据键查找值的集合,反之亦然。每个值都有一个键,每个键都有一个值。有没有可以立即使用的数据结构呢? 问题答案: 该BIMAP从谷歌番石榴看起来会适合你。 双向映射(或“双向映射”)是一种保留其值以及其键的唯一性的映射。此约束使bimap可以支持“反向视图”,这是另一个bimap,它包含与此bimap相同的条目,但具有相反的键和值。 或来自Apache Commons Co

  • 问题内容: 会根据其位置而不是其值来生成其元素被视为唯一的元素。所以基本上我想避免重复这样的事情: 之后的过滤是不可能的,因为在我的情况下,排列的数量太大。 有人知道合适的算法吗? 非常感谢你! 编辑: 我基本上想要的是以下内容: 这是不可能的,因为sorted创建列表并且itertools.product的输出太大。 抱歉,我应该已经描述了实际问题。 问题答案: 结果: 编辑(这是如何工作的):

  • 问题内容: 我想向现有表添加复杂的唯一键。主要从4个字段包含(,,,)。但是表具有非唯一行。我知道我可以删除所有重复的日期,然后再添加复杂的密钥。 也许存在另一种无需搜索所有重复数据的解决方案。(例如添加唯一的忽略等)。 我搜索了UPD,如何删除重复的mysql行-我认为这是一个很好的解决方案。 仅使用MySQL查询删除重复项? 问题答案: 您可以按照yAnTar的建议进行 要么 您可以添加约束

  • 在Prestashop 1.7中,“自定义”特征值和非自定义特征值之间的技术区别是什么(我说的是布尔字段)? 因为为了在DB中保存特征值,我想在初始化我的对象的属性之后使用。其中包括布尔值

  • 我有一个包含以下列的表:id、col1、col2、col3、col4、col5、col6。 约束表示至少有3列被填充(所以最多3个NULs)。(列不按顺序填充,所以可以有col1、col2、col5被填充,col3、col4、col6是NULs) 如何确保当该列不为NULL时,它在此行的其他列中是唯一的?如何确保非空值的组合在所有行中都是唯一的? 我目前添加了以下约束(以确保至少3个非空):

  • 问题内容: 这个问题需要一些假设的背景。让我们考虑一个有列的表,,,,使用MySQL作为RDBMS。由于如果给定的某个人的名字和出生日期与另一个人相同,那么根据定义,他们就是同一个人(除非有两个巧合,即我们两个人分别于1809年2月12日出生,他们叫亚伯拉罕·林肯),所以我们将上的唯一键,这意味着“不要将同一个人存储两次”。现在考虑以下数据: 如果现在尝试运行以下语句,则该语句应该并且将失败: 如