目前我正试图将RDD转换为contingency table,以便使用pyspark.ml.clustering.KMeans
模块,该模块以数据帧作为输入。在
当我做myrdd.take(K)
(其中K是某个数字)时,结构如下所示:
[[u'user1',('itm1',3),...,('itm2',1)], [u'user2',('itm1',7),..., ('itm2',4)],...,[u'usern',('itm2',2),...,('itm3',10)]]
其中,每个列表都包含一个实体作为第一个元素,以及该实体以元组的形式喜欢的所有项及其计数的集合。在
现在,我的目标是将上面的内容转换成类似于下面列联表的sparkDataFrame
。在
+----------+------+----+-----+
|entity |itm1 |itm2|itm3 |
+----------+------+----+-----+
| user1 | 3| 1| 0|
| user2 | 7| 4| 0|
| usern | 0| 2| 10|
+----------+------+----+-----+
我在下面的链接中引用了df.stat.crosstab
方法:
它几乎接近我想要的。在
但是如果上面的元组中还有一个count字段,即('itm1',3)
如何将这个值合并(或添加)到列联表(或实体项矩阵)的最终结果中。在
当然,我要走很长的路,将上面的RDD
列表转换成一个矩阵,并将它们作为csv文件写入,然后作为DataFrame
读回。在
有没有更简单的方法使用DataFrame?在
使用createDataFrame()方法将RDD转换为pyspark dataframe。在
使用交叉表方法后使用show方法。请参考以下示例:
以表格格式显示:
^{pr2}$输出:
相关问题 更多 >
编程相关推荐