AttributeError:将 sql 函数作为默认参数传递时,“NoneType”对象没有属性“_jvm”

Posted

技术标签:

【中文标题】AttributeError:将 sql 函数作为默认参数传递时,“NoneType”对象没有属性“_jvm”【英文标题】:AttributeError: 'NoneType' object has no attribute '_jvm' when passing sql function as a default parameter 【发布时间】:2018-03-09 15:06:01 【问题描述】:

我知道之前有人问过同样的错误,但在this example 和this other example 中,错误是由在udf 中使用pyspark.sql 函数引起的。这不是我正在做的。

有问题的代码是以下函数定义(如果我删除默认参数,我的代码将运行并通过所有测试)。

from pyspark.sql import functions as F

def apply_filter(df, group=F.lit(True)):
    filtered_df = df.filter(group)

我主要是在寻找此代码产生与其他示例中相同的错误的原因。

编辑:

由于工作原因无法分享原始代码,但是如果您使用spark-submit --deploy-mode cluster <filename> 运行之前的代码,则会产生以下错误。

LogType:stdout
Log Upload Time:Fri Mar 09 16:01:45 +0000 2018
LogLength:343
Log Contents:
Traceback (most recent call last):
  File "temp.py", line 3, in <module>
    def apply_filter(df, group=F.lit(True)):
  File "/mnt/yarn/usercache/hadoop/appcache/application_1520603520946_0005/container_1520603520946_0005_01_000001/pyspark.zip/pyspark/sql/functions.py", line 40, in _
AttributeError: 'NoneType' object has no attribute '_jvm'
End of LogType:stdout

有趣的是,如果在本地运行,错误不会持续存在。

【问题讨论】:

您能否提供堆栈跟踪以及您如何使用apply_filter 函数? 这与问题无关,因为错误是由定义函数引起的。 【参考方案1】:

无法实例化火花上下文时会发生此错误。当您在 UDF 中使用 pyspark sql 函数时,您试图在其中实例化一个不允许的 spark 上下文。

火花上下文无法实例化的原因可能有多种

火花配置错误 节点配置冲突 部署不适合集群配置的 jar ...

【讨论】:

以上是关于AttributeError:将 sql 函数作为默认参数传递时,“NoneType”对象没有属性“_jvm”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError: 'QuerySet' 对象没有属性 'add'

Pandas`agc`列表,“AttributeError / ValueError:函数不减少”

AttributeError 列表对象没有属性添加

AttributeError:“会话”对象没有属性“会话”

AttributeError:“按钮”对象没有属性

AttributeError:“函数”对象没有属性“视图”