有没有办法在 pyspark 数组函数中放置多个列? (FP 成长准备)
Is there a way to put multiple columns in pyspark array function? (FP Growt prep)
我有一个带有疾病症状的 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"))
我有一个带有疾病症状的 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"))