在pyspark中为FP增长做好数据准备

时间:2016-10-04 09:12:16

标签: apache-spark pyspark

我正在尝试实施FP growth algorith。我有以下格式的数据:

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

如何将其转换为[[apple,caterpillar],[banana,monkey],[dog,bone,oath]]

1 个答案:

答案 0 :(得分:1)

假设您的数据是DataFrame,我们首先将其转换为rdd,然后定义key,使用它们对数据进行分组,最后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"])