使用pyspark

时间:2019-02-14 19:55:51

标签: pyspark rdd

我们有一个https://archive.ics.uci.edu/ml/datasets/Plants的数据集

此数据的格式是用逗号分隔的csv文件。

第一列是植物名称,下一个字符串是具有该植物的状态。

当我们从文件加载数据时,它假设为两列(工厂名称,状态列表)

[Row('plant1',['qc','on']),Row('plant2',['on'])]

直到完成此步骤。通过使用:

1- load data from text file as RDD
2- parts = RDD.map(lambda x: x.value.split(','))
3- data = parts.map(lambda x: Row(x[0],x[1:]))

这可以解决问题,因为文件中的第一个属性是唯一的。

但是下一步是将该列表重新格式化为类似的内容:

(州名,词典) 字典的格式如{plant name:value}(如果工厂处于状态,则value为int = 1,否则为0)

我执行相同的先前步骤来保留工厂名称,然后使用rdd.flatMapValues 步骤:

1- load data from text file as RDD
2- parts = RDD.map(lambda x: x.values.split(','))
3- data = parts.map(lambda x: Row(x[0],x[1:]))
4- data = data.flatMapValues(lambda x:x)

我收到像这种格式的rdd [('plant1','qc'),('plant1','on'),('plant2','on')]

5- I swap the values using 
data = data.map(lambda x:(x[1],x[0]))

因此,rdd数据类似于:

[('qc','plant1'),('on','plant1'),('on','plant2')]

现在,我在如何使这种表示方式方面遇到问题:

[('qc',{'plant1':1}),('on',{plant1:1,plant2:1})]

有人可以帮忙吗?

0 个答案:

没有答案