gpt4 book ai didi

python - Spark MLlib 中的 StringIndexer

转载 作者:行者123 更新时间:2023-12-01 02:09:36 24 4
gpt4 key购买 nike

我的 PipelinedRDD 中有一列标称值,我希望将其转换为索引编码以用于分类目的。

我曾经在pyspark.ml中使用StringIndexer,它非常容易使用。不过,这次我正在学习如何处理 rdd 而不是 dataframe,而 pyspark.mllib 中没有这样的东西。

感谢任何帮助。

最佳答案

Spark MLlib 中没有 StringIndexer,因此您需要自己完成这项工作。首先收集该列的所有可能值并为每个值分配一个数字,将其保存为字典。然后,将其应用到原始 rdd 值上。

下面的代码假设PipelinedRDD 每行包含两个值,要转换的值位于第一个位置 (0):

dic = PipelinedRDD.map(lambda x: x[0]).distinct().zipWithIndex().collectAsMap()
PipelinedRDD = PipelinedRDD.map(lambda x: (dic[x[0]], x[1]))

注意:这与 StringIndexer 的 Spark 实现略有不同,因为它没有考虑值的频率(Spark 会将 0 分配给出现的值)大多数,然后 1 等等)。然而,在大多数情况下,不同字符串分配什么索引并不重要。

<小时/>

扩展如果您想准确模仿 StringIndexer 的功能(如上面的注释中所述),可以稍微修改代码以考虑到这一点

dic = PiplelinedRDD.groupBy('cat_column').count().sort(col("count").desc()).map(lambda x: x[0]).zipWithIndex().collectAsMap()
PipelinedRDD = PipelinedRDD.map(lambda x: (dic[x[0]], x[1]))

关于python - Spark MLlib 中的 StringIndexer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48779347/

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