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'