使用 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)))
我有一个并行化的元组列表,格式如下:
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)))