gpt4 book ai didi

pyspark - 当某些值为空时,如何将 DataFrame 中的多个列连接到另一列?

转载 作者:行者123 更新时间:2023-12-01 08:24:53 31 4
gpt4 key购买 nike

def column_concat(a,b):
return concat(a,b)

searches_df = searches_df.withColumn('unique_id',reduce(column_concat,(searches_df[col] for col in search_parameters)))

这有效,除非列包含空值,然后整个连接字符串为空。我想要一个占位符或连接字符串中的某个字符。

最佳答案

给定以下数据框:

df = sqlContext.createDataFrame([("foo", "bar"), ("baz", None)], 
('a', 'b'))
df.show()

+---+----+
| a| b|
+---+----+
|foo| bar|
|baz|null|
+---+----+

一种解决方案是使用 udf 过滤/替换空值,例如:
import pyspark.sql.functions as F
from pyspark.sql.types import StringType

concat_udf = F.udf(lambda cols: "".join([x if x is not None else "*" for x in cols]), StringType())
df.withColumn("unique_id", concat_udf(F.array("a", "b"))).show()

产生:
+---+----+---------+
| a| b|unique_id|
+---+----+---------+
|foo| bar| foobar|
|baz|null| baz*|
+---+----+---------+

或者:
import pyspark.sql.functions as F

def myConcat(*cols):
return F.concat(*[F.coalesce(c, F.lit("*")) for c in cols])

df.withColumn("unique_id", myConcat("a", "b")).show()

这也产生:
+---+----+---------+
| a| b|unique_id|
+---+----+---------+
|foo| bar| foobar|
|baz|null| baz*|
+---+----+---------+

关于pyspark - 当某些值为空时,如何将 DataFrame 中的多个列连接到另一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39395049/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com