Переформатировать набор данных с помощью pyspark - PullRequest
0 голосов
/ 14 февраля 2019

У нас есть набор данных из 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:]))

это решит проблему, поскольку первый атрибут в файле уникален.

Но следующий шаг - переформатировать этот список в нечто вроде:

(имя штата, словарь), где словарь имеет формат, такой как {имя растения: значение} (значение равно 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})]

Может ли кто-нибудь помочь в этом?

...