将RDD转换为列联表:Pysp

2024-04-26 18:13:59 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正试图将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方法:

Statistical and Mathematical Functions with DataFrames in Apache Spark - 4. Cross Tabulation (Contingency Table)

它几乎接近我想要的。在

但是如果上面的元组中还有一个count字段,即('itm1',3)如何将这个值合并(或添加)到列联表(或实体项矩阵)的最终结果中。在

当然,我要走很长的路,将上面的RDD列表转换成一个矩阵,并将它们作为csv文件写入,然后作为DataFrame读回。在

有没有更简单的方法使用DataFrame?在


Tags: 模块方法实体dataframe列表矩阵元组rdd
1条回答
网友
1楼 · 发布于 2024-04-26 18:13:59

使用createDataFrame()方法将RDD转换为pyspark dataframe。在

使用交叉表方法后使用show方法。请参考以下示例:

cf = train_predictions.crosstab("prediction","label_col")

以表格格式显示:

^{pr2}$

输出:

+          +  +  +
|prediction_label_col| 0.0| 1.0|
+          +  +  +
|                 1.0| 752|1723|
|                 0.0|1830| 759|
+          +  +  +

相关问题 更多 >