我正在尝试实施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]]
?
答案 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"])