我有一个UDF,如下所示,这是一个普通的标量Pyspark UDF:
@udf()
def redact(colVal: column, offset: int = 0):
if not colVal or not offset:
return 'X'*8
else:
charList=list(colVal)
charList[:-offset]='X'*(len(colVal)-offset)
return "".join(charList)
当我试图将其转换为pandas_udf时,当我阅读时,使用矢量化的UDF代替标量UDF时,性能有了很大的提高,我遇到了很多与pandas相关的问题,而这些问题我经验不足。
请帮助我将此UDF转换为矢量化Pandas UDF
2条答案
按热度按时间p1tboqfb1#
redact
函数可以 Package 在一个函数中,该函数将redact
应用于pd.Series
的每一项。需要应用Currying,因为要传递标量
offset
值。输出
zzwlnbp82#
Nithish回复的重构版本:
这个函数可以是任何东西,只要它只占用一个列。因此,在这种情况下,
create_udf
是F.udf
的直接替代品。正如Nithish已经指出的那样,与Spark 3.5.0中引入的参数
useArrow=True
相比,序列化开销减少了。所以在Spark 3.5.0中不再需要这种代码,可以使用useArrow。