为 Spark 上的 fpgrowth 准备二进制表示的数据

Preparing binary represented data for fpgrowth on Spark

我目前正在使用 Kaggle 的 Santander 产品推荐数据集对 FPGrowth 进行实验。

pyspark (ML) 的 FPGrowth 算法需要数据框作为项目集:

+---+------------+
| id|       items|
+---+------------+
|  0|   [A, B, E]|
|  1|[A, B, C, E]|
|  2|      [A, B]|
+---+------------+

但是我的数据是这样的格式:

+---+---+---+---+---+---+
| id|  A|  B|  C|  D|  E|
+---+---+---+---+---+---+
|  0|  1|  1|  0|  0|  1|
|  1|  1|  1|  1|  0|  1|
|  2|  1|  1|  0|  0|  0|
+---+---+---+---+---+---+

我试图通过用列名替换 1 并从中创建列表来解决这个问题,但这没有用。

有没有办法通过使用 Spark 数据帧函数来执行此转换?

非常感谢!

使用udf:

from pyspark.sql.functions import udf, struct

@udf("array<string>")
def as_basket(row):
    return [k for k, v in row.asDict().items() if v]

df.withColumn("basket", as_basket(struct(*df.columns[1:]))).show()