【问题标题】:Pyspark: Parallelize a UDFPyspark:并行化 UDF
【发布时间】:2020-05-27 16:01:31
【问题描述】:

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

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】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多