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

Spark dataframe reducebykey-like操作

臧烨烁
2023-03-14

我有一个包含以下数据的Spark数据框(我使用Spark csv加载数据):

key,value
1,10
2,12
3,0
1,20

是否有类似于spark RDD的东西可以返回spark数据帧:(基本上,对相同的键值求和)

key,value
1,30
2,12
3,0

(我可以将数据转换为RDD并执行reduceByKey操作,但是否有更具Spark DataFrame API的方法来实现这一点?)

共有3个答案

颛孙博易
2023-03-14

这个怎么样?我同意这仍然转换为rdd然后转换为dataframe。

df.select('key','value').map(lambda x: x).reduceByKey(lambda a,b: a+b).toDF(['key','value'])
姬宝
2023-03-14

我认为用户goks遗漏了代码中的某些部分。它不是经过测试的代码。

.map应用于使用将rdd转换为pairRDD。映射(λx:(x,1))。还原键。。。。

ReporteByKey在单个值rdd或常规rdd上不可用,但对RDD可用。

谢谢

章晗日
2023-03-14

如果不关心列名,可以使用groupBy,后跟sum:

df.groupBy($"key").sum("value")

否则最好将sum替换为agg

df.groupBy($"key").agg(sum($"value").alias("value"))

最后,您可以使用原始SQL:

df.registerTempTable("df")
sqlContext.sql("SELECT key, SUM(value) AS value FROM df GROUP BY key")

另请参见数据帧/数据集分组行为/优化

 类似资料:
  • LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。 SQL LIKE 操作符 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。 SQL LIKE 语法SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面是选自 "Web

  • 我需要从具有以下条件的表中提取数据: 我编写的JPA存储库类类似于 如何在JPararePository Spring中查找多个like spring JpaRepository中的%like%查询

  • 这是 Go 提供的操作 SQL/SQL-Like 数据库的通用接口,但 Go 标准库并没有提供具体数据库的实现,需要结合第三方的驱动来使用该接口。本书使用的是 mysql 的驱动:github.com/go-sql-driver/mysql。 注:该包有一个子包:driver,它定义了一些接口供数据库驱动实现,一般业务代码中使用 database/sql 包即可,尽量避免使用 driver 这个子

  • 在 PostgreSQL 数据库中,我们如果要获取包含某些字符的数据,可以使用 LIKE 子句。 在 LIKE 子句中,通常与通配符结合使用,通配符表示任意字符,在 PostgreSQL 中,主要有以下两种通配符: 百分号 % 下划线 _ 如果没有使用以上两种通配符,LIKE 子句和等号 = 得到的结果是一样的。 语法 以下是使用 LIKE 子句搭配百分号 % 和下划线 _ 从数据库中获取数据的通

  • 主要内容:语法,示例SQL LIKE 子句用于在 WHERE 语句中进行模糊匹配,它会将给定的匹配模式和某个字段进行比较,匹配成功则选取,否则不选取。 LIKE 子句可以和通配符一起使用: 通配符 说明 百分号(%) 代表零个、一个或者多个任意的字符。 下划线(_) 代表单个字符或者数字。 [charlist] 字符列表中的任何单一字符。可以使用连字符(-)根据 ASCII 编码指定一个字符范围,例如: [0-9]

  • 问题内容: 我想搜索一个XML值列,看是否包含一个字符串。我不知道架构,我想知道字符串是否包含在任何地方。我不知道XPATH是否可以在这种情况下工作。 相当于 错误:参数数据类型xml对于同类函数的参数1无效。 相关表格列 我要搜索的项目应该是一个属性。因此,如果上述方法不可能实现,那么包含该属性的任何内容都将是一个不错的选择。 问题答案: 最简单(但绝对不是最快执行)的方法是在将列传递给之前将其