【发布时间】:2017-05-26 09:54:47
【问题描述】:
使用 sparks vector assembler 需要预先定义要组装的列。
但是,如果在前面的步骤将修改数据框的列的管道中使用向量组装器,我如何在不手动硬编码所有值的情况下指定列?
由于df.columns 将不包含正确的值,当构造函数被调用向量汇编器目前我看不到另一种方法来处理它或拆分管道 - 这也很糟糕因为 CrossValidator 将不再正常工作。
val vectorAssembler = new VectorAssembler()
.setInputCols(df.columns
.filter(!_.contains("target"))
.filter(!_.contains("idNumber")))
.setOutputCol("features")
编辑
初始df
---+------+---+-
|foo| id|baz|
+---+------+---+
| 0| 1 | A|
| 1|2 | A|
| 0| 3 | null|
| 1| 4 | C|
+---+------+---+
将被转换如下。您可以看到 nan 值将被估算为最常见的原始列和一些派生的特征,例如如此处所述isA 如果 baz 为 A,则为 1,否则为 0,如果最初为 null N
+---+------+---+-------+
|foo|id |baz| isA |
+---+------+---+-------+
| 0| 1 | A| 1 |
| 1|2 | A|1 |
| 0| 3 | A| n |
| 1| 4 | C| 0 |
+---+------+---+-------+
稍后在管道中,使用 stringIndexer 使数据适合 ML/vectorAssembler。
isA 不存在于原始 df 中,但不是“唯一”输出列 此帧中除 foo 和 id 列之外的所有列都应由向量汇编器转换。
我希望现在更清楚了。
【问题讨论】:
-
您是如何构建或添加该列的?
-
通过 df.withcolumn 这是您正在寻找的答案吗?
-
所以这实际上超出了您的管道。但为什么?
-
没有内部集成在自定义估算器中
-
那么你所说的“管道”,不是指实际的管道 API 吗?
标签: apache-spark pipeline apache-spark-ml