在PySpark中使用RDDs计算列表中的数值。

问题描述 投票:-1回答:1

我陷入了一个寻找每个城市的每个工资的计数的问题,我只用RDDs来解决这个问题,这意味着没有使用DF和任何库的函数。

我的代码是 data= cities.map(lambda x: ((x.split()[0], int(x.split()[1])))).groupByKey().mapValues(list)

该代码的输出是 ('cityX',[54,40,43,54,43,55])

我想找到cityX的每个工资的计数,然后取这个城市的最大计数。

我使用的是PySpark python shell。

需要的输出是 ('cityX',[(54,1),(40,1),(43,1),(54,1),(43,1),(55,1)])

我可以用什么操作来给每个工资号1,然后通过保持键的原样来计算每个工资的1?

python apache-spark pyspark rdd
1个回答
0
投票

你可以使用 map 为每个RDD元素添加一个1,作为一个新元组。(RDDElement, 1)groupByKeymapValues(len) 来计算每个城市工资对。例如

salaries = sc.parallelize([("city1",100000),("city2", 85000),("city1",155000),("city2",180000),("city2",180000)])

salaries.map(lambda x: (x, 1)).groupByKey().mapValues(len).collect()

结果是:

[(('city2', 85000), 1),
 (('city2', 180000), 2),
 (('city1', 100000), 1),
 (('city1', 155000), 1)]
© www.soinside.com 2019 - 2024. All rights reserved.