Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将RDD转换为列联表:Pyspark_Python_Apache Spark_Pyspark_Pyspark Sql - Fatal编程技术网

Python 将RDD转换为列联表:Pyspark

Python 将RDD转换为列联表:Pyspark,python,apache-spark,pyspark,pyspark-sql,Python,Apache Spark,Pyspark,Pyspark Sql,目前,我正在尝试将RDD转换为,以便使用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)]] 其中,每个列表包含一个实体作为第一个元素,以及该实体喜欢的元组形式的

目前,我正在尝试将RDD转换为,以便使用
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)]]

其中,每个列表包含一个实体作为第一个元素,以及该实体喜欢的元组形式的所有项及其计数的集合

现在,我的目标是将上述内容转换为类似于以下列联表的spark
DataFrame

+----------+------+----+-----+
|entity    |itm1  |itm2|itm3 |
+----------+------+----+-----+
|    user1 |     3|   1|    0|
|    user2 |     7|   4|    0|
|    usern |     0|   2|   10|
+----------+------+----+-----+
我使用了
df.stat.crosstab
方法,如下链接所述:

这几乎是我想要的

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

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


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

使用createDataFrame()方法将RDD转换为pyspark DataFrame

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

cf = train_predictions.crosstab("prediction","label_col")
要以表格格式显示,请执行以下操作:

cf.show()
输出:

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

在这个问题上,我不同意@zero323的观点,因为它是一个“直接”的重复,但它提供了一种替代方法来做你所寻求的事情。这个问题的答案可以从我最近的一个问题中看到。虽然这最初是为了将RDD结构转换为数据帧,但答案的最后部分使用了数据透视、groupby和sum,为这个问题提供了解决方案。如果有人觉得这是重复的,我将结束当前的问题。