pyspark - Pyspark:并行化 UDF
问题描述
我想遍历两个列表,将组合传递给一个函数,并获得以下输出:
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 中一个很长的复杂算法。只是想发布一个简单的例子来概括。
做这个的最好方式是什么?</p>
解决方案
使用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
推荐阅读
- java - 这个问题中增量和加法之间的区别?
- selenium - Selenium 停止使用错误消息:无法找到元素:{“method”:“xpath”,“selector”:“//span[contains(text(), 'Allow')]”}
- android - 查找电子邮件和/或用户名是否存在于 Firebase - Android
- css - css - 损坏文本的样式元素(空白:正常)
- discord.py - Discord.py 如何检查任务是否处于活动状态?
- mongodb - 当 collection_filters 设置为将当天的数据从 DocumentDB/MongoDB 同步到文件/ElasticSearch 时,Compose Transporter 抛出错误
- swift - 将 UIView 作为子视图添加到 UIButton 并将其置于前面无法正常工作
- state-machine - 构造一个接受语言 L = {w | 的 DFA w ∈ {a,b}* 和 Na(w) mod 3 > Nb (w) mod 3}
- python - 我正在学习套接字,但无法解决我的客户端文件中的错误
- c - 以高效的方式用 C 编写序列