Skip to main content
 首页 » 编程设计

python之Pyspark:合并嵌套列表中的值

2025年02月15日38xing901022

我有一个 pair-RDD 的结构: [(键, [(时间字符串, 值)]]

例子:

[("key1", [("20161101", 23), ("20161101", 41), ("20161102", 66),...]), 
 ("key2", [("20161101", 86), ("20161101", 9), ("20161102", 11),...]) 
  ...] 

我想处理每个键的列表,按时间字符串分组并计算相同时间字符串的所有值的平均值。所以上面的例子会变成:

[("key1", [("20161101", 32), ..]), 
 ("key2", [("20161101", 47.5),...]) 
  ...] 

我很难在一步中找到仅使用 Pyspark 方法的解决方案,是否完全可行,或者我是否需要使用一些中间步骤?

请您参考如下方法:

你可以定义一个函数:

from itertools import groupby 
import numpy as np 
 
def mapper(xs): 
    return [(k, np.mean([v[1] for v in vs])) for k, vs in groupby(sorted(xs), lambda x: x[0])] 

和mapValues

rdd = sc.parallelize([ 
    ("key1", [("20161101", 23), ("20161101", 41), ("20161102", 66)]), 
    ("key2", [("20161101", 86), ("20161101", 9), ("20161102", 11)]) 
]) 
 
rdd.mapValues(mapper)