2024-05-16 09:04:09 发布
网友
我的PipelinedRDD中有一列名义值,我想将其转换为索引编码,以便于分类。在
PipelinedRDD
我曾经在pyspark.ml中使用StringIndexer,它非常容易使用。但是,这一次我在学习如何处理rdd而不是数据帧,pyspark.mllib中没有这样的东西。在
pyspark.ml
StringIndexer
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的功能,如上面的注释所述,可以对代码稍作修改以将其考虑在内
Spark MLlib中没有
StringIndexer
,因此您需要自己完成这项工作。从收集该列的所有可能值开始,并为每个列分配一个数字,将其保存为字典。然后,将其应用于原始rdd值。在下面的代码假设
PipelinedRDD
每行包含两个值,其中要转换的值位于第一个位置(0):注意:这与
StringIndexer
的Spark实现略有不同,因为它没有考虑值的频率(Spark将为出现最多的值分配0,然后分配1,依此类推)。然而,在大多数情况下,不同的字符串分配什么索引并不重要。在扩展 如果您想完全模仿StringIndexer的功能,如上面的注释所述,可以对代码稍作修改以将其考虑在内
^{pr2}$相关问题 更多 >
编程相关推荐