我有一个PySpark数据框
+-------+--------------+----+----+ |address| date|name|food| +-------+--------------+----+----+ |1111111|20151122045510| Yin|gre | |1111111|20151122045501| Yin|gre | |1111111|20151122045500| Yln|gra | |1111112|20151122065832| Yun|ddd | |1111113|20160101003221| Yan|fdf | |1111111|20160703045231| Yin|gre | |1111114|20150419134543| Yin|fdf | |1111115|20151123174302| Yen|ddd | |2111115| 20123192| Yen|gre | +-------+--------------+----+----+
我想转换为与pyspark.ml一起使用。我可以使用StringIndexer将名称列转换为数字类别:
indexer = StringIndexer(inputCol="name", outputCol="name_index").fit(df) df_ind = indexer.transform(df) df_ind.show() +-------+--------------+----+----------+----+ |address| date|name|name_index|food| +-------+--------------+----+----------+----+ |1111111|20151122045510| Yin| 0.0|gre | |1111111|20151122045501| Yin| 0.0|gre | |1111111|20151122045500| Yln| 2.0|gra | |1111112|20151122065832| Yun| 4.0|ddd | |1111113|20160101003221| Yan| 3.0|fdf | |1111111|20160703045231| Yin| 0.0|gre | |1111114|20150419134543| Yin| 0.0|fdf | |1111115|20151123174302| Yen| 1.0|ddd | |2111115| 20123192| Yen| 1.0|gre | +-------+--------------+----+----------+----+
如何使用StringIndexer转换几列(例如name和food,每列都有自己的StringIndexer),然后使用VectorAssembler生成特征向量?还是我必须StringIndexer为每个列创建一个?
name
food
StringIndexer
编辑:这不是一个重复,因为我需要以编程方式针对具有不同列名的多个数据框进行此操作。我不能使用VectorIndexer或VectorAssembler因为列不是数字。
VectorIndexer
VectorAssembler
编辑2 :暂时的解决方案是
indexers = [StringIndexer(inputCol=column, outputCol=column+"_index").fit(df).transform(df) for column in df.columns ]
现在,我在其中创建一个包含三个数据帧的列表,每个数据帧均与原始数据以及转换后的列相同。现在,我需要加入然后形成最终的数据框,但这效率很低。
我发现做到这一点的最好方法是将StringIndex一个列表中的几个合并并使用aPipeline来执行它们:
StringIndex
Pipeline
from pyspark.ml import Pipeline from pyspark.ml.feature import StringIndexer indexers = [StringIndexer(inputCol=column, outputCol=column+"_index").fit(df) for column in list(set(df.columns)-set(['date'])) ] pipeline = Pipeline(stages=indexers) df_r = pipeline.fit(df).transform(df) df_r.show() +-------+--------------+----+----+----------+----------+-------------+ |address| date|food|name|food_index|name_index|address_index| +-------+--------------+----+----+----------+----------+-------------+ |1111111|20151122045510| gre| Yin| 0.0| 0.0| 0.0| |1111111|20151122045501| gra| Yin| 2.0| 0.0| 0.0| |1111111|20151122045500| gre| Yln| 0.0| 2.0| 0.0| |1111112|20151122065832| gre| Yun| 0.0| 4.0| 3.0| |1111113|20160101003221| gre| Yan| 0.0| 3.0| 1.0| |1111111|20160703045231| gre| Yin| 0.0| 0.0| 0.0| |1111114|20150419134543| gre| Yin| 0.0| 0.0| 5.0| |1111115|20151123174302| ddd| Yen| 1.0| 1.0| 2.0| |2111115| 20123192| ddd| Yen| 1.0| 1.0| 4.0| +-------+--------------+----+----+----------+----------+-------------+