有没有办法在 pyspark 数组函数中放置多列? FP 生长准备

问题描述

我有一个有疾病症状的 DataFrame,我想在整个 DataFrame 上运行 FP Growt。 FP Growt 需要一个数组作为输入,它可以使用以下代码

dfFPG = (df.select(F.array(df["Gender"],df["polyuria"],df["polydipsia"],df["Sudden weight loss"],df["Weakness"],df["polyphagia"],df["Genital rush"],df["Visual blurring"],df["Itching"]).alias("features")

from pyspark.ml.fpm import FPGrowth
fpGrowth = FPGrowth(itemsCol="features",minSupport=0.3,minConfidence=0.2)
model = fpGrowth.fit(dfFPG)

model.freqItemsets.show(20,truncate=False)

功能列表更长,如果我必须更改 df 的名称,我必须使用查找和替换。我知道我可以使用 F.col("Gender") 而不是 df["Gender"],但是有没有办法将 F.array() 中的所有列一次性放入,并且能够像 df["Age"] 这样排除少数列? 或者,有没有其他有效的方法来为 FP Growt 准备我不知道的分类特征?

解决方法

您可以使用 df.columns 获取所有列名并将它们全部放入 array 中:

import pyspark.sql.functions as F

dfFPG = df.select(F.array(*[c for c in df.columns if c not in ['col1','col2']]).alias("features"))