Python 如何在pyspark中bucketize一组列?

Python 如何在pyspark中bucketize一组列?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我试图在5k数据集中对包含单词“road”的列进行bucketize。并创建一个新的数据帧 我不知道如何做到这一点,以下是我迄今为止尝试过的: from pyspark.ml.feature import Bucketizer spike_cols = [col for col in df.columns if "road" in col] for x in spike_cols : bucketizer = Bucketizer(splits=[-float("inf"), 10

我试图在5k数据集中对包含单词“road”的列进行bucketize。并创建一个新的数据帧

我不知道如何做到这一点,以下是我迄今为止尝试过的:

from pyspark.ml.feature import Bucketizer

spike_cols = [col for col in df.columns if "road" in col]

for x in spike_cols :

    bucketizer = Bucketizer(splits=[-float("inf"), 10, 100, float("inf")],
                        inputCol=x, outputCol=x + "bucket")

bucketedData = bucketizer.transform(df)

在循环中修改
df

from pyspark.ml.feature import Bucketizer

for x in spike_cols :
    bucketizer = Bucketizer(splits=[-float("inf"), 10, 100, float("inf")],
                    inputCol=x, outputCol=x + "bucket")
    df = bucketizer.transform(df)
或者使用管道:

from pyspark.ml import Pipeline
from pyspark.ml.feature import Bucketizer 

model = Pipeline(stages=[
    Bucketizer(
        splits=[-float("inf"), 10, 100, float("inf")],
        inputCol=x, outputCol=x + "bucket") for x in spike_cols
]).fit(df)

model.transform(df)
由于3.0.0,Bucketizer可以通过设置inputCols参数一次映射多个列

因此,这变得更容易:

从pyspark.ml.feature导入Bucketizer
拆分=[-float(“inf”)、10100、float(“inf”)]
params=[(col,col+'bucket',如果col中为“road”,则为df列中的col拆分]
输入列、输出列、拆分列=zip(*params)
bucketizer=bucketizer(输入=输入,输出=输出,
splitsArray=拆分(数组)
BucketEdata=bucketizer.transform(df)