【问题标题】:Pyspark UDF AttributeError: 'NoneType' object has no attribute '_jvm'Pyspark UDF AttributeError:“NoneType”对象没有属性“_jvm”
【发布时间】:2018-04-13 16:18:48
【问题描述】:

我有一个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)]

我这样称呼它:

df.withColumn("myArray", create_users_array(df["myNumber"]))

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

例如 4 --&gt; [4,4,4,4]

在我们从 Python 2.7 升级并升级我们的 EMR 版本(我相信它使用 Pyspark 2.3)之前它一直有效

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

【问题讨论】:

  • 请发帖minimal reproducible example。看起来您至少混合了不同的DataFramesdf_aggdf)并且使用类需要非常小心。并且udf 你发布的单独工作正常。
  • 抱歉,错误地复制了代码(将 df_agg 更改为 df
  • 这段代码仍然无法重现。
  • @user9613318 好吧,您必须设置一个与我的配置相同的 EMR 集群,所以它不容易“重现”。不过我修好了;在下面回答。

标签: python-3.x python-2.7 apache-spark pyspark user-defined-functions


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多