Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 名称错误:全局名称';非类型';未在Spark中定义_Python_Apache Spark_Pyspark_User Defined Functions_Bigdata - Fatal编程技术网

Python 名称错误:全局名称';非类型';未在Spark中定义

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

我编写了一个UDF,将“latest_travel_date”列中的一些特定日期值替换为“NA”。但是,该列还包含许多空值,因此我也在UDF中处理了这一点。(请参阅下文)

然而,我不断地得到错误: 名称错误:未定义全局名称“非类型”


有人能帮我解决这个问题吗?

问题是这行:

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"])