Python 3.x Pyspark UDF AttributeError:';非类型';对象没有属性'_jvm';

Python 3.x Pyspark UDF AttributeError:';非类型';对象没有属性'_jvm';,python-3.x,python-2.7,apache-spark,pyspark,user-defined-functions,Python 3.x,Python 2.7,Apache Spark,Pyspark,User Defined Functions,我有一个自定义函数: @staticmethod @F.udf("array<int>") def create_users_array(val): """ Takes column of ints, returns column of arrays containing ints. """ return [val for _ in range(val)] 我给它传递一个整数数据帧列,它返回一个整数数组 例如。 4-->[4,4,4,4] 它一直在工作,直到我们从

我有一个自定义函数:

@staticmethod
@F.udf("array<int>")
def create_users_array(val):
    """ Takes column of ints, returns column of arrays containing ints. """ 
    return [val for _ in range(val)]
我给它传递一个整数数据帧列,它返回一个整数数组

例如。
4-->[4,4,4,4]

它一直在工作,直到我们从Python 2.7升级,并升级了我们的EMR版本(我相信它使用的是Pyspark 2.3)


有人知道这是什么原因吗?

看起来这与新版本中对UDF的改进有关(或者更确切地说,是对旧语法的弃用)。更改udf装饰器对我很有用
@F.udf(“array”)
-->@F.udf(ArrayType(IntegerType()))

请发布一篇文章。看起来您至少混合了不同的
数据帧
df_agg
df
),使用类需要非常小心。而且
udf
您发布的代码在隔离状态下工作正常。啊,很抱歉,错误地复制了代码(将
df_agg
更改为
df
),使用此代码仍然无法复制。@user9613318好吧,您必须使用与我相同的配置设置EMR集群,因此它不容易“复制”。不过我把它修好了;回答如下。
df.withColumn("myArray", create_users_array(df["myNumber"]))