gpt4 book ai didi

python - Pyspark:根据数组(字符串)长度或 CountVectorizer 计数过滤 DF

转载 作者:行者123 更新时间:2023-12-04 16:05:39 25 4
gpt4 key购买 nike

我将 URL 数据聚合到一个字符串数组中。这种形式的。 [xyz.com,abc.com,efg.com]

我最终在 pyspark 中使用计数矢量化器将其转换为类似 (262144,[3,20,83721],[1.0,1.0,1.0]) 的矢量。

向量在 262144 中表示的位置;有 3 个 URL 存在索引为 3,20 和 83721 的某一行。所有这些数据都是二进制的,因此是 1 的数组。

我想过滤并仅使用包含一定数量条目的行。因此,如果我说只想使用带有 4 个示例的行;我希望删除上面的行。

我可以对 Count Vectorizer 返回的向量形式的字符串数组进行此过滤。

在我的数据中,我有数千万行,只是不知道如何有效地做到这一点。

这是为生成示例而编辑的文档中的代码

from pyspark.ml.feature import CountVectorizer

# Input data: Each row is a bag of words with a ID.
df = spark.createDataFrame([
(0, "a".split(" ")),
(1, "a b c".split(" "))
], ["id", "words"])

# fit a CountVectorizerModel from the corpus.
cv = CountVectorizer(inputCol="words", outputCol="features", vocabSize=3)

model = cv.fit(df)

result = model.transform(df)

所以这里说我们只想要长度为 2 或更高的结果。同样,我不介意对 CountVectorizer 生成的向量或之前的 String 数组执行此操作,只要它对我的数据大小有效。

最佳答案

你可以使用 DataFrame.filter 和 size 函数:

from pyspark.sql.functions import size

df.filter(size('words') > 2).show()

+---+---------+
| id| words|
+---+---------+
| 1|[a, b, c]|
+---+---------+

我会在 CountVectorizer 之前执行它,以避免让它执行不需要执行的工作。如果 Spark 可以确定这样做是安全的,Spark 将在执行计划中更早地拉取过滤器操作,但明确总是更好。

关于python - Pyspark:根据数组(字符串)长度或 CountVectorizer 计数过滤 DF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49698111/

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