我熟悉使用UDF将自定义函数逐行应用于DataFrame。但是,我想知道如何将自定义函数并行应用于DataFrame的不同子集。
这是一个简化的示例:
import numpy as np
import pandas as pd
dummy_data = pd.DataFrame({'id':np.random.choice(['a','b','c'],size=100),
'val':np.random.normal(size=100)})
我的自定义函数将数字数组作为输入。对于每个唯一的“ id”,我想将函数应用于与该ID相关联的“ val”值数组。
我现在这样做的一种简单方法是循环遍历我的PySpark DataFrame,并为每个“ id”将数据转换为pandas DataFrame,然后应用该函数。它可以工作,但是显然它很慢并且不使用火花。
我该如何并行化?
答案 0 :(得分:1)
这个答案太短了,它应该只是一个评论,而没有足够的声誉来发表评论。
Spark 2.3引入了熊猫矢量化的UDF,这正是您正在寻找的:通过PyArrow序列化,以分布式方式在分组的Spark DataFrame上执行自定义熊猫转换,并具有出色的性能。
请参见
有关更多信息和示例。