gpt4 book ai didi

apache-spark - 如何在可能为空的列上使用 PySpark CountVectorizer

转载 作者:行者123 更新时间:2023-12-04 03:56:58 25 4
gpt4 key购买 nike

我的 Spark DataFrame 中有一个列:

 |-- topics_A: array (nullable = true)
| |-- element: string (containsNull = true)

我正在使用 CountVectorizer:
topic_vectorizer_A = CountVectorizer(inputCol="topics_A", outputCol="topics_vec_A")

我得到 NullPointerExceptions,因为有时 topic_A 列包含空值。

有没有解决的办法?用零长度数组填充它可以正常工作(尽管它会大大增加数据大小) - 但我无法弄清楚如何在 PySpark 中的 Array 列上执行 fillNa 。

最佳答案

我个人会删除带有 NULL 值的列,因为那里没有有用的信息,但您可以用空数组替换空值。首先是一些进口:

from pyspark.sql.functions import when, col, coalesce, array

您可以将特定类型的空数组定义为:

fill = array().cast("array<string>")

并将其与 when 子句结合起来:

topics_a = when(col("topics_A").isNull(), fill).otherwise(col("topics_A"))

coalesce :
topics_a = coalesce(col("topics_A"), fill)

并将其用作:

df.withColumn("topics_A", topics_a)

所以使用示例数据:

df = sc.parallelize([(1, ["a", "b"]), (2, None)]).toDF(["id", "topics_A"])

df_ = df.withColumn("topics_A", topics_a)
topic_vectorizer_A.fit(df_).transform(df_)

结果将是:

+---+--------+-------------------+
| id|topics_A| topics_vec_A|
+---+--------+-------------------+
| 1| [a, b]|(2,[0,1],[1.0,1.0])|
| 2| []| (2,[],[])|
+---+--------+-------------------+

关于apache-spark - 如何在可能为空的列上使用 PySpark CountVectorizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40352675/

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