在PySpark中使用pandas\u udf时无法填充数组

在PySpark中使用pandas\u udf时无法填充数组,pandas,apache-spark,pyspark,pandas-groupby,user-defined-functions,Pandas,Apache Spark,Pyspark,Pandas Groupby,User Defined Functions,我有一个PySpark数据帧 +---+------+------+ |key|value1|value2| +---+------+------+ | a| 1| 0| | a| 1| 42| | b| 3| -1| | b| 10| -2| +---+------+------+ 我定义了一个像熊猫一样的世界- schema = StructType([ StructField("key", Str

我有一个PySpark数据帧

+---+------+------+
|key|value1|value2|
+---+------+------+
|  a|     1|     0|
|  a|     1|    42|
|  b|     3|    -1|
|  b|    10|    -2|
+---+------+------+
我定义了一个像熊猫一样的世界-

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)的输出看起来是正确的,但是数组仍然是空的

返回类型对我来说并不重要,因为我没有更改/处理数据,我只想将其推送到自定义类对象中。

我必须为列表定义自定义类型并使用它

from pyspark.accumulators import AccumulatorParam
class ListParam(AccumulatorParam):
    def zero(self, val):
        return []
    def addInPlace(self, val1, val2):
        val1.append(val2)
        return val1

您是否可以尝试将arr设置为类似于
global arr=[]
?如果不起作用,请尝试使用
sc.broadcast(arr)