Python 名称错误:全局名称';非类型';未在Spark中定义
我编写了一个UDF,将“latest_travel_date”列中的一些特定日期值替换为“NA”。但是,该列还包含许多空值,因此我也在UDF中处理了这一点。(请参阅下文) 然而,我不断地得到错误: 名称错误:未定义全局名称“非类型”Python 名称错误:全局名称';非类型';未在Spark中定义,python,apache-spark,pyspark,user-defined-functions,bigdata,Python,Apache Spark,Pyspark,User Defined Functions,Bigdata,我编写了一个UDF,将“latest_travel_date”列中的一些特定日期值替换为“NA”。但是,该列还包含许多空值,因此我也在UDF中处理了这一点。(请参阅下文) 然而,我不断地得到错误: 名称错误:未定义全局名称“非类型” 有人能帮我解决这个问题吗?问题是这行: if type(date_col) == NoneType: 看起来你真的想要: if date_col is None: 这个问题可以通过两种方式解决 如果试图从数据帧中查找空值,则应使用 像这样: if type(da
有人能帮我解决这个问题吗?问题是这行:
if type(date_col) == NoneType:
看起来你真的想要:
if date_col is None:
这个问题可以通过两种方式解决 如果试图从数据帧中查找空值,则应使用 像这样:
if type(date_col) == NullType
或者,如果日期列不是这样的,您也可以找到:
if date_col is None
我希望这能有所帮助。正如迈克尔所指出的,你做不到
if type(date_col) == NoneType:
但是,将其更改为None
将无法完成任务。还有一个问题
date_col= 'NA'
它是StringType
,但您将返回类型声明为DateType
。注释中的\u jvm
错误抱怨数据类型不匹配
似乎您只想在1899
或1900
时将date\u col
标记为None
,并删除所有空值。如果是,您可以这样做:
def date_cleaner(date_col):
if date_col:
if year(date_col) in ('1899','1900'):
return None
return date_col
date_cleaner_udf = udf(date_cleaner, DateType())
Df3= Df2.withColumn("latest_cleaned", date_cleaner_udf("latest_travel_date")).dropna(subset=["latest_travel_date"])
这是因为
DateType
可以采用有效的datetime或Null(默认情况下)。您可以“清理”数据帧。当我这样做时,会导致错误:“非类型”对象没有属性“\u jvm”@Preyas是从同一行报告的吗?您的堆栈跟踪是什么?不,生成错误的行在两个查询之间发生了更改。@Preyas,听起来您必须在其他地方有代码在一个不存在的对象上运行。您应该找到该堆栈跟踪的源,并确保在输入为None的情况下绕过该操作。我按照您的建议尝试了这两个选项,但最终出现了错误:AttributeError:“NoneType”对象没有属性“\u jvm”您能做些什么吗?您能否在问题中添加一部分数据框。我在《星火》中做了和你一样的事。但这个问题没有发生。我们需要看到这个数据帧。
def date_cleaner(date_col):
if date_col:
if year(date_col) in ('1899','1900'):
return None
return date_col
date_cleaner_udf = udf(date_cleaner, DateType())
Df3= Df2.withColumn("latest_cleaned", date_cleaner_udf("latest_travel_date")).dropna(subset=["latest_travel_date"])