我想遍历两个列表,将组合传递给一个函数,并获得以下输出:
ru = ['a', 'b', 'c']
ni = ['x', 'y', 'z']
def my_func(ru, ni):
print("{} + {}".format(ru, ni))
for i in ru:
for j in ni:
my_func(i,j)
# Output
a + x
a + y
a + z
b + x
b + y
b + z
c + x
c + y
c + z
由于这是Pyspark,我想对其进行并行化,因为该函数的每次迭代都可以独立运行。
注意:我的实际功能是pyspark中一个很长的复杂算法。只是想发布一个简单的例子进行概括。
最佳方法是什么?
使用cartesian
:
ru = sc.parallelize(['a', 'b', 'c'])
ni = sc.parallelize(['x', 'y', 'z'])
print(ru.cartesian(ni).collect())
针对您的情况,
ru.cartesian(ni).map(some_func)
或:
def my_func(ru, ni):
print("{} + {}".format(ru, ni))
ru.cartesian(ni).foreach(lambda t: my_func(t[0], t[1]))
a + z
a + y
a + x
b + y
b + x
b + z
c + y
c + x
c + z