[英]Unable to populate array while using pandas_udf in PySpark
我有一个 PySpark dataframe,就像
+---+------+------+
|key|value1|value2|
+---+------+------+
| a| 1| 0|
| a| 1| 42|
| b| 3| -1|
| b| 10| -2|
+---+------+------+
我已经定义了一个 pandas_udf 像 -
schema = StructType([
StructField("key", StringType())
])
arr = []
@pandas_udf(schema, PandasUDFType.GROUPED_MAP)
def g(df):
k = df.key.iloc[0]
series = [d for d in df.value2]
arr.append(len(series))
print(series)
return pd.DataFrame([k])
df3.groupby("key").apply(g).collect()
print(arr)
很明显,数组 arr 应该是 [2, 2],但它仍然是空的。 当我检查驱动程序日志时,print(series) 的 output 看起来是正确的,但数组仍然是空的。
返回类型对我来说并不重要,因为我没有更改/处理数据,我只想将其推送到自定义 class object 中。
我必须为列表定义一个自定义累加器并使用它。
from pyspark.accumulators import AccumulatorParam
class ListParam(AccumulatorParam):
def zero(self, val):
return []
def addInPlace(self, val1, val2):
val1.append(val2)
return val1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.