2016-10-04 2 views
0

Я пытаюсь реализовать FP growth algorith. У меня есть данные в следующем формате:Получение данных для роста FP в pyspark

Food  rank 
apple  1 
caterpillar 1 
banana  2 
monkey  2 
dog   3 
bone  3 
oath  3 

Как превратить его в [[apple,caterpillar],[banana,monkey],[dog,bone,oath]]?

+0

Что делает ранг представляют? FPGrowth принимает последовательность «событий» в виде списка. Таким образом, согласно вашему результату, это то, что FPGrowth будет читать после события 1, событие apple happend, а затем событие гусеницы. Вы уверены, что хотите получить этот результат? – eliasah

ответ

1

Если предположить, что данные является DataFrame, мы сначала преобразовать его в rdd, а затем определить key «S, использовать их, чтобы сгруппировать данные и, наконец, map эти значения в list и извлечь их. Мы можем сделать это двумя способами, либо использовать groupByKey():

(df.rdd 
.map(lambda x: (x[1],x[0])) 
.groupByKey() 
.mapValues(list) 
.values()) 

Или использовать reduceByKey(), которая собирается быть более эффективным:

(df.rdd 
.map(lambda x: (x[1],[x[0]])) 
.reduceByKey(lambda x,y: x+y) 
.values()) 

данных:

df = sc.parallelize([("apple", 1), 
        ("caterpillar", 1), 
        ("banana", 2), 
        ("monkey", 2), 
        ("dog", 3), 
        ("bone", 3), 
        ("oath", 3)]).toDF(["Food", "rank"]) 
+0

Как удалить дубликат из пищи? – kinkajou

+0

Какие дубликаты? – mtoto

+0

например, если у меня есть два яблока с ранга 1. Я хочу иметь только одно яблоко. – kinkajou

Смежные вопросы