我有一个 PySpark Dataframe,有两列(A, B,其类型为double),其值为0.0或1.0。我正在尝试添加一个新列,它是这两列的总和。我遵循Pyspark 中的示例:Pass multiple columns in UDF
import pyspark.sql.functions as F
from pyspark.sql.types import IntegerType, StringType
sum_cols = F.udf(lambda x: x[0]+x[1], IntegerType())
df_with_sum = df.withColumn('SUM_COL',sum_cols(F.array('A','B')))
df_with_sum.select(['SUM_COL']).toPandas()
Run Code Online (Sandbox Code Playgroud)
这显示了一系列NULLs 而不是我期望的结果。
我尝试了以下任一方法来查看数据类型是否存在问题
sum_cols = F.udf(lambda x: x[0], IntegerType())
sum_cols = F.udf(lambda x: int(x[0]), IntegerType())
Run Code Online (Sandbox Code Playgroud)
仍然得到空值。
我尝试删除数组:
sum_cols = F.udf(lambda x: x, IntegerType())
df_with_sum = df.withColumn('SUM_COL',sum_cols(df.A))
Run Code Online (Sandbox Code Playgroud)
这工作正常并显示0/1
我尝试删除 UDF,但保留数组:
df_with_sum = df.withColumn('SUM_COL', F.array('A','B'))
Run Code Online (Sandbox Code Playgroud)
这工作正常并显示一系列数组[0.0/1.0, 0.0/1.0]
因此,数组工作正常,UDF 工作正常,只是当我尝试将数组传递给 UDF …