Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 用矢量汇编程序处理动态列_Apache Spark_Pipeline_Apache Spark Ml - Fatal编程技术网

Apache spark 用矢量汇编程序处理动态列

Apache spark 用矢量汇编程序处理动态列,apache-spark,pipeline,apache-spark-ml,Apache Spark,Pipeline,Apache Spark Ml,使用sparks向量汇编器,需要预先定义要组装的列 但是,如果在管道中使用向量汇编程序,前面的步骤将修改数据帧的列,那么如何在不手动硬编码所有值的情况下指定列 由于df.columns将不包含正确的值,因此当调用向量汇编程序的构造函数时,目前我看不到另一种方法来处理该问题或分割管道-这也是不好的,因为CrossValidator将不再正常工作 val vectorAssembler = new VectorAssembler() .setInputCols(df.columns

使用sparks向量汇编器,需要预先定义要组装的列

但是,如果在管道中使用向量汇编程序,前面的步骤将修改数据帧的列,那么如何在不手动硬编码所有值的情况下指定列

由于
df.columns
包含正确的值,因此当调用向量汇编程序的构造函数时,目前我看不到另一种方法来处理该问题或分割管道-这也是不好的,因为CrossValidator将不再正常工作

val vectorAssembler = new VectorAssembler()
    .setInputCols(df.columns
      .filter(!_.contains("target"))
      .filter(!_.contains("idNumber")))
    .setOutputCol("features")
编辑 初始测向

---+------+---+-
|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列外)都应由向量汇编程序进行转换


我希望现在更清楚。

如果我正确理解您的问题,答案将非常简单明了,您只需使用上一个转换器中的
.getOutputCol

示例(来自官方文件):


如果我正确理解您的问题,答案将非常简单明了,您只需使用上一个转换器中的
.getOutputCol

示例(来自官方文件):


我创建了一个定制的向量汇编程序(原版的1:1副本),然后将其更改为包含所有列,但传递给排除的列除外

编辑 更清楚一点

def setInputColsExcept(value: Array[String]): this.type = set(inputCols, value)
指定应排除哪些列。然后

val remainingColumns = dataset.columns.filter(!$(inputCols).contains(_))

在transform中,方法是筛选所需的列。

我创建了一个自定义向量汇编程序(原始的1:1副本),然后将其更改为包含所有列,但传递给排除的列除外

编辑 更清楚一点

def setInputColsExcept(value: Array[String]): this.type = set(inputCols, value)
指定应排除哪些列。然后

val remainingColumns = dataset.columns.filter(!$(inputCols).contains(_))

在转换中,方法是过滤所需的列。

不幸的是,这并没有像我修改一些原始列那样简单,例如nan填充和创建一些新列。因此,没有单一的“输出”列,而是有多个。向量汇编程序是估计器将所有数据转换为单个列之前的最后一步。不幸的是,它并没有那么简单,因为我正在修改一些原始列,例如nan填充和创建一些新列。因此,没有单一的“输出”列,而是有多个。向量汇编程序是估计器将所有内容转换为单个列之前的最后一步。您是如何构建或添加该列的?通过df.withcolumn这是您要寻找的答案吗?因此,这实际上超出了您的管道范围。但是为什么?没有内部集成在定制的估算器中,所以你实际上说的“管道”,你不是指实际的管道API?你是如何构建或添加该列的?通过df.withcolumn,这是你要寻找的答案吗?因此,这实际上在你的管道之外。但是为什么呢?没有内部集成在定制的API中,所以你实际上所说的“管道”,并不是指实际的管道API?你能把这个答案更详细一点吗?这是太高的层次,无法在将来帮助其他人。我正试图在pyspark中做同样的事情。你能再详细一点吗?你能再详细一点回答吗?这是太高的层次,无法在将来帮助其他人。我正试图在pyspark中做同样的事情。你能再详细一点吗?