【问题标题】:Apply QuantileDiscretizer to all columns in a DataFrame将 QuantileDiscretizer 应用于 DataFrame 中的所有列
【发布时间】:2017-07-27 04:05:54
【问题描述】:

假设我有一个 id 和 100 列的数据框。我想在每一列上应用QuantileDiscretizer 并返回一个新的数据框,其中 id 列与具有离散值的新列绑定。 仅两列的示例:

输入

编号 | col1 | col2 --|--------|------ 0 | 18.0 | 20.0 --|--------|------ 1 | 19.0 | 30.0 --|--------|------ 2 | 8.0 | 35.0 --|--------|------ 3 | 5.0 | 10.0 --|--------|------ 4 | 2.2 | 5.0

输出

编号 | col1 光盘 | col2光盘 ----|------------|------ 0 | 2 | 2 ----|------------| ------ 1 | 2 | 3 ----|------------|------ 2 | 1 | 3 ----|------------|------ 3 | 2 | 1 ----|------------|------ 4 | 0 | 0

【问题讨论】:

    标签: scala apache-spark dataframe apache-spark-mllib


    【解决方案1】:

    您可以使用Pipeline API:

    import org.apache.spark.ml.Pipeline
    
    val df = Seq(
      (0, 18.0, 20.0), (1, 19.0, 30.0), (2, 8.0, 35.0), (3, 5.0, 10.0), (4, 2.2, 5.0)
    ).toDF("id", "col1", "col2")
    
    
    val pipeline = new Pipeline().setStages(for {
      c <- df.columns
      if c != "id"
    } yield new QuantileDiscretizer().setInputCol(c).setOutputCol(s"${c}Disc"))
    
    val result = pipeline.fit(df).transform(df)
    result.drop(df.columns.diff(Seq("id")): _*).show
    
    
    +---+--------+--------+
    | id|col1Disc|col2Disc|
    +---+--------+--------+
    |  0|     1.0|     1.0|
    |  1|     1.0|     1.0|
    |  2|     1.0|     1.0|
    |  3|     0.0|     0.0|
    |  4|     0.0|     0.0|
    +---+--------+--------+
    

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2019-06-26
      • 2017-10-22
      • 2022-10-15
      • 2016-05-15
      • 2016-08-24
      相关资源
      最近更新 更多