我陷入了一个寻找每个城市的每个工资的计数的问题,我只用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?
你可以使用 map
为每个RDD元素添加一个1,作为一个新元组。(RDDElement, 1)
和 groupByKey
和 mapValues(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)]