Spark UDF error AttributeError: 'NoneType' object has no attribute '_jvm'
Spark UDF error AttributeError: 'NoneType' object has no attribute '_jvm'
我发现了类似的问题 ,但没有提供解决问题的答案。
我想制作一个 UDF,它可以为我从列中提取单词。因此,我想创建一个名为 new_column
的列,方法是将我的 UDF 应用于 old_column
from pyspark.sql.functions import col, regexp_extract
re_string = 'some|words|I|need|to|match'
def regex_extraction(x,re_string):
return regexp_extract(x,re_string,0)
extracting = udf(lambda row: regex_extraction(row,re_string))
df = df.withColumn("new_column", extracting(col('old_column')))
AttributeError: 'NoneType' object has no attribute '_jvm'
如何修复我的功能?我有很多列,想遍历列列表并应用我的 UDF。
您不需要 UDF。当您无法使用 PySpark 执行某些操作时需要 UDF,因此您需要一些 python 函数或库。在您的情况下,您可以有一个接受列和 returns 列的函数,但仅此而已,不需要 UDF。
from pyspark.sql.functions import regexp_extract
df = spark.createDataFrame([('some match',)], ['old_column'])
re_string = 'some|words|I|need|to|match'
def regex_extraction(x, re_string):
return regexp_extract(x, re_string, 0)
df = df.withColumn("new_column", regex_extraction('old_column', re_string))
df.show()
# +----------+----------+
# |old_column|new_column|
# +----------+----------+
# |some match| some|
# +----------+----------+
“循环”通过列表中的列可以这样实现:
from pyspark.sql.functions import regexp_extract
cols = ['col1', 'col2']
df = spark.createDataFrame([('some match', 'match')], cols)
re_string = 'some|words|I|need|to|match'
def regex_extraction(x, re_string):
return regexp_extract(x, re_string, 0)
df = df.select(
'*',
*[regex_extraction(c, re_string).alias(f'new_{c}') for c in cols]
)
df.show()
# +----------+-----+--------+--------+
# | col1| col2|new_col1|new_col2|
# +----------+-----+--------+--------+
# |some match|match| some| match|
# +----------+-----+--------+--------+
我发现了类似的问题
我想制作一个 UDF,它可以为我从列中提取单词。因此,我想创建一个名为 new_column
的列,方法是将我的 UDF 应用于 old_column
from pyspark.sql.functions import col, regexp_extract
re_string = 'some|words|I|need|to|match'
def regex_extraction(x,re_string):
return regexp_extract(x,re_string,0)
extracting = udf(lambda row: regex_extraction(row,re_string))
df = df.withColumn("new_column", extracting(col('old_column')))
AttributeError: 'NoneType' object has no attribute '_jvm'
如何修复我的功能?我有很多列,想遍历列列表并应用我的 UDF。
您不需要 UDF。当您无法使用 PySpark 执行某些操作时需要 UDF,因此您需要一些 python 函数或库。在您的情况下,您可以有一个接受列和 returns 列的函数,但仅此而已,不需要 UDF。
from pyspark.sql.functions import regexp_extract
df = spark.createDataFrame([('some match',)], ['old_column'])
re_string = 'some|words|I|need|to|match'
def regex_extraction(x, re_string):
return regexp_extract(x, re_string, 0)
df = df.withColumn("new_column", regex_extraction('old_column', re_string))
df.show()
# +----------+----------+
# |old_column|new_column|
# +----------+----------+
# |some match| some|
# +----------+----------+
“循环”通过列表中的列可以这样实现:
from pyspark.sql.functions import regexp_extract
cols = ['col1', 'col2']
df = spark.createDataFrame([('some match', 'match')], cols)
re_string = 'some|words|I|need|to|match'
def regex_extraction(x, re_string):
return regexp_extract(x, re_string, 0)
df = df.select(
'*',
*[regex_extraction(c, re_string).alias(f'new_{c}') for c in cols]
)
df.show()
# +----------+-----+--------+--------+
# | col1| col2|new_col1|new_col2|
# +----------+-----+--------+--------+
# |some match|match| some| match|
# +----------+-----+--------+--------+