gpt4 book ai didi

对数组进行操作的 Pandas UDF

转载 作者:行者123 更新时间:2023-12-04 01:14:55 26 4
gpt4 key购买 nike

我有一个 PySpark UDF,它接受一个数组并返回其后缀:

func.udf( lambda ng: ng[1:], ArrayType(IntegerType()) )

是否可以将其转换为标量 pandas_udf?Pandas 是否提供必要的矢量化操作?

谢谢

最佳答案

您可以使用标量 pandas udf 获得相同的功能,但请确保您从 udf 返回一个带有列表列表的系列,因为该系列通常需要一个元素列表,并且您的行数组被展平并转换为多行,如果您直接将列表作为系列返回。

已编辑 正如 OP 在评论中指出的那样,我之前使用索引的答案(pd.Series([v[0][1:]]) 是错误的,并且仅在某些条件下有效。现在已更正.

df = spark.createDataFrame([([1,2,3],'val1'),([4,5,6],'val2')],['col1','col2'])
df.show()
+---------+----+
| col1|col2|
+---------+----+
|[1, 2, 3]|val1|
|[4, 5, 6]|val2|
+---------+----+

from pyspark.sql.functions import pandas_udf,PandasUDFType
from pyspark.sql.types import *
import pandas as pd

@pandas_udf(ArrayType(LongType()))
def func(v):
res=[]
for row in v:
res.append(row[1:])
return pd.Series(res)

df.withColumn('col3',func(df.col1)).show()
+---------+----+------+
|col1 |col2|col3 |
+---------+----+------+
|[1, 2, 3]|val1|[2, 3]|
|[4, 5, 6]|val2|[5, 6]|
+---------+----+------+

另一种方法是使用类似于您所做的应用:

@pandas_udf(ArrayType(LongType()))
def func(v):
return v.apply(lambda x:x[1:])

关于对数组进行操作的 Pandas UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com