У нас есть набор данных из 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})]
Может ли кто-нибудь помочь в этом?