Tôi có một dataframe PySparkÁp dụng StringIndexer đến một số cột trong một PySpark Dataframe
+-------+--------------+----+----+
|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| 2| Yen|gre |
+-------+--------------+----+----+
mà tôi muốn chuyển đổi để sử dụng với pyspark.ml. Tôi có thể sử dụng một StringIndexer để chuyển đổi các cột tên vào một danh mục số:
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| 2| Yen| 1.0|gre |
+-------+--------------+----+----------+----+
Làm thế nào tôi có thể chuyển đổi nhiều cột với StringIndexer (ví dụ, name
và food
, đều có riêng của mình StringIndexer
) và sau đó sử dụng VectorAssembler để tạo một vector tính năng? Hoặc tôi có phải tạo một StringIndexer
cho mỗi cột không?
** EDIT **: Đây không phải là bản dupe vì tôi cần phải lập trình này cho một số khung dữ liệu có tên cột khác nhau. Tôi không thể sử dụng VectorIndexer
hoặc VectorAssembler
vì các cột không phải là số.
** EDIT 2 **: Một giải pháp dự kiến là
indexers = [StringIndexer(inputCol=column, outputCol=column+"_index").fit(df).transform(df) for column in df.columns ]
nơi tôi có thể tạo một danh sách bây giờ với ba dataframes, mỗi giống hệt với bản gốc cộng với cột chuyển. Bây giờ tôi cần phải tham gia sau đó để tạo thành khung dữ liệu cuối cùng, nhưng điều đó rất không hiệu quả.
có thể trùng lặp của [Mã hóa và lắp ráp nhiều tính năng trong PySpark] (http://stackoverflow.com/questions/32982425/encode-and-assemble-multiple-features-in-pyspark) – zero323
Tương tự nhưng không thực sự. Anh ta đang làm một cột tại một thời điểm cho mỗi chỉ mục chuỗi và tôi cần phải làm với một số cột cùng một lúc, mà không làm mỗi tách – Ivan
Sau đó, nó không phải là có thể. Điều gì sẽ là ngay cả đầu ra? – zero323