如何在Pyspark中将RDD列表传递给groupWith

时间:2016-06-03 19:14:52

标签: python apache-spark pyspark rdd

我正在尝试将RDD列表传递给groupWith,而不是通过索引手动指定它们。

以下是示例数据

w = sc.parallelize([("1", 5), ("3", 6)])
x = sc.parallelize([("1", 1), ("3", 4)])
y = sc.parallelize([("2", 2), ("4", 3)])
z = sc.parallelize([("2", 42), ("4", 43), ("5", 12)])

现在我已经创建了这样的数组。

m = [w,x,y,z]

手动硬编码方式是

[(x, tuple(map(list, y))) for x, y in sorted(list(m[0].groupWith(m[1],m[2],m[3]).collect()))]

打印在结果

下面
[('1', ([5], [1], [], [])), 
('2', ([], [], [2], [42])), 
('3', ([6], [4], [], ])),
 ('4', ([], [], [3], [43])), 
('5', ([], [], [], [12]))]

但我想做一些像传递m[1:]而不是手动传递的事情。

[(x, tuple(map(list, y))) for x, y in sorted(list(m[0].groupWith(m[1:]).collect()))]

我尝试删除括号,但必须将其转换为字符串,然后才会出现错误

AttributeError: 'list' object has no attribute 'mapValues'

    AttributeError: 'str' object has no attribute 'mapValues'

1 个答案:

答案 0 :(得分:0)

由于groupWith接受varargs所有你需要做的就是解包参数:

w.groupWith(*m[1:])