#apache-spark #pyspark #associations #fpgrowth
#apache-spark #pyspark #ассоциации #fpgrowth
Вопрос:
Я пытаюсь использовать pyspark для анализа правил ассоциации. Допустим, мои данные похожи:
myItems=spark.createDataFrame([(1,'a'),
(1,'b'),
(1,'d'),
(1,'c'),
(2,'a'),
(2,'c'),],
['id','item'])
Но согласно https://spark.apache.org/docs/2.2.0/ml-frequent-pattern-mining.html формат должен быть:
df = spark.createDataFrame([(1, ['a', 'b', 'd','c']),
(2, ['a', 'c'])],
["id", "items"])
Итак, мне нужно перенести мои данные из вертикального положения в горизонтальное, и длины для всех идентификаторов разные.
Как я могу выполнить эту передачу, или есть другой способ сделать это?
Ответ №1:
Пусть ваше исходное определение myItems
будет действительным. collect_list
будет полезно после того, как вы обычно group
обрабатываете фрейм данных по идентификатору.
>>> myItems=spark.createDataFrame([(1,'a'),
... (1,'b'),
... (1,'d'),
... (1,'c'),
... (2,'a'),
... (2,'c'),],
... ['id','item'])
>>> from pyspark.sql.functions import collect_list
>>> myItems.groupBy(myItems.id).agg(collect_list('item')).show()
--- ------------------
| id|collect_list(item)|
--- ------------------
| 1| [a, b, d, c]|
| 2| [a, c]|
--- ------------------