将函数映射到 pyspark 数据框的多列

Mapping a function to multiple columns of pyspark dataframe

我有一个 pyspark df,它有很多列,但其中的一个子集如下所示:

datetime eventid sessionid lat lon filtertype
someval someval someval someval someval someval
someval someval someval someval someval someval

我想映射函数 some_func(),它只使用列 'lat'、'lon' 和 'event_id' 到 return 布尔值将作为名为 'verified' 的单独列添加到 df 的值。基本上我需要单独检索函数内感兴趣的列并对它们进行操作。 我知道我可以使用 UDF 或 df.withColumn() 但它们用于映射到单列。为此,我需要将感兴趣的列连接为一列,这会使代码有点混乱。

有没有办法单独检索函数内的列值并将该函数映射到整个数据框? (类似于我们可以使用 map-lambda 和 df.apply() 对 Pandas df 执行的操作)?

你可以创建一个可以占用多个列作为参数的udf

例如:

from pyspark.sql.functions as f
from pyspark.sql.types import BooleanType

def your_function(p1, p2, p3):
    # your logic goes here
    # return a bool

udf_func = f.udf(your_function, BooleanType())


df = spark.read.....

df2 = df.withColumn("verified", udf_func(f.col("lat"), f.col("lon"), f.col("event_id")))

df2.show(truncate=False)