在PySpark中使用pandas\u udf时无法填充数组
我有一个PySpark数据帧在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
+---+------+------+
|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)