PySpark:我如何修复这个UDF以将列表中的值替换为无值?错误:需要结构类型,但得到双精度

2024-06-26 00:19:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用PySpark数据框中的None替换列表中的某些字符串值(nan_字符串)。dataframe包含类型为double、date和string的列。如何仅将UDF应用于字符串值,而不必编写额外的for循环

这是我目前的代码:

#convert the following values to None
nan_strings = ["nicht geschlüsselt", "NULL-Default", "0000000000", 'nicht gefüllt', '99991231', '?', 
'unbekannt']

#get column names
column_names = df_fraud.schema.names
print(column_names)

#create function to replace values with None
def replace(column, value):
    #if column is not the value and not of type string then return values, otherwise return None
    return when(column != value & ~ column.dtypes.startswith('string'), column).otherwise(lit(None))

#turn into literal
nan_strings_literal = array(*[array(*[lit(nan_string)]) for nan_stringin nan_strings])
#apply udf column by column
for column in column_names:
  df_fraud = df_fraud.withColumn(str(column), replace(col(str(column)), nan_strings_literal))

但是,我确实收到了异常AnalysisException:“无法从列中提取值:需要结构类型,但得到了双精度


Tags: 字符串nonedfforstringreturnnamesvalue