Pyspark:并行化UDF

问题描述 投票:0回答:1

我想遍历两个列表,将组合传递给一个函数,并获得以下输出:

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中一个很长的复杂算法。只是想发布一个简单的例子进行概括。

最佳方法是什么?

pyspark parallel-processing apache-spark-sql pyspark-dataframes
1个回答
0
投票

使用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
© www.soinside.com 2019 - 2024. All rights reserved.