Pyspark UDF AttributeError: 'NoneType' 对象没有属性 '_jvm'

mor*_*ime 2 user-defined-functions python-2.7 python-3.x apache-spark pyspark

我有一个 udf 功能:

@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)]
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

df.withColumn("myArray", create_users_array(df["myNumber"]))
Run Code Online (Sandbox Code Playgroud)

我向它传递一个整数数据帧列,它返回一个该整数的数组。

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

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

有谁知道是什么原因造成的?

mor*_*ime 8

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