在我成为python和spark世界的新人之前。 我有大学的家庭作业,但我卡在一个地方。 我从我的数据中进行聚类,现在我在PipelinedRDD
中拥有了我的聚类 aftre this:
cluster = featurizedScaledRDD.map(lambda r: kmeansModelMllib.predict(r))
cluster = [2,1,2,0,0,0,1,2]
现在我有cluster
我的数据框dataDf
我需要适合我的cluster
,就像新列dataDf
i Have: i Need:
+---+---+---+ +---+---+---+-------+
| x | y | z | | x | y | z |cluster|
+---+---+---+ +---+---+---+-------+
| 0 | 1 | 1 | | 0 | 1 | 1 | 2 |
| 0 | 0 | 1 | | 0 | 0 | 1 | 1 |
| 0 | 8 | 0 | | 0 | 8 | 0 | 2 |
| 0 | 8 | 0 | | 0 | 8 | 0 | 0 |
| 0 | 1 | 0 | | 0 | 1 | 0 | 0 |
+---+---+---+ +---+---+---+-------+
答案 0 :(得分:0)
您可以使用zipWithIndex
,join
添加索引,然后转换回df
。
swp = lambda x: (x[1], x[0])
cluster.zipWithIndex().map(swp).join(dataDf.rdd.zipWithIndex().map(swp)) \
.values().toDF(["cluster", "point"])
在某些情况下,应该可以使用zip
:
cluster.zip(dataDf.rdd).toDF(["cluster", "point"])
您可以使用.select("cluster", "point.*")
跟随展平输出。