Pyspark + 关联规则挖掘:如何将数据框转为适合频繁模式挖掘的格式?
Pyspark + association rule mining: how to transfer a data frame to a format suitable for frequent pattern mining?
我正在尝试使用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"])
所以我需要将我的数据从垂直方向转移到水平方向,并且所有 ID 的长度都不同。
我该如何进行这种转移,或者有其他方法吗?
让您对 myItems
的原始定义有效。 collect_list
在您通常 group
按 id 的数据框后会有帮助。
>>> 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]|
+---+------------------+
我正在尝试使用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"])
所以我需要将我的数据从垂直方向转移到水平方向,并且所有 ID 的长度都不同。
我该如何进行这种转移,或者有其他方法吗?
让您对 myItems
的原始定义有效。 collect_list
在您通常 group
按 id 的数据框后会有帮助。
>>> 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]|
+---+------------------+