使用 lambda 在 PySpark 中进行元组操作,python

Tuple manipulation in PySpark with lambda, python

我有一个并行化的元组列表,格式如下:

data= [('Emily', (4, 2)),
        ('Alfred', (1, 12)),
        ('George', (10, 2))]
list = sc.parallelize(data)

我想要的是乘以元组中的整数,这将给我这个输出:

[('Emily', (8)),
 ('Alfred', (12)),
 ('George', (20))]

我试过:

list = list.map(lambda x: (x[0], x[1]*x[2]))

但是没有效果。

在你的 lambda x[1] 中是一个元组 ((4, 2)...),因此你需要访问要相乘的第一个和第二个值 (x[1][0]... ).

试试这个:

result = list.map(lambda x: (x[0], x[1][0] * x[1][1]))

print(result.collect())
#[('Emily', 8), ('Alfred', 12), ('George', 20)]

另一种方法是将元组传递给使用 mul 运算符的 reduce 函数:

import operator
import functools

list.map(lambda x: (x[0], functools.reduce(operator.mul, x[1], 1)))