Spark MLlib中的StringIndexer

2024-05-16 09:04:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我的PipelinedRDD中有一列名义值,我想将其转换为索引编码,以便于分类。在

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

感谢任何帮助。在


Tags: 数据编码分类mlpysparkrdd名义mllib
1条回答
网友
1楼 · 发布于 2024-05-16 09:04:09

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的功能,如上面的注释所述,可以对代码稍作修改以将其考虑在内

^{pr2}$

相关问题 更多 >