带字符串的Spark VectorAssembler变换器

时间:2016-03-01 13:13:48

标签: apache-spark spark-dataframe apache-spark-ml

首先,让我们分别定义几个由dfStringdfDouble组成的Spark数据帧stringsdoubles

val dfString = sqlContext.createDataFrame(Seq(("a1", "b1", "c1"), ("a2", "b2", "c2"))).toDF("colx", "coly", "colz")
val dfDouble = sqlContext.createDataFrame(Seq((0.0, 1.0, 2.0), (3.0, 4.0, 5.0))).toDF("colx", "coly", "colz")

其次,我们准备一个由单个变压器组成的管道:

val va = new VectorAssembler().setInputCols(Array("colx", "coly", "colz")).setOutputCol("ft")
val pipeline = new Pipeline().setStages(Array(va))

将此管道安装到dfDouble将返回预期结果,其中所有列都连接到名为ft的单个列中。但pipeline.fit(dfString)抛出

  

java.lang.IllegalArgumentException:数据类型StringType不是   支撑。

问题是:如何在保持管道框架内的同时从双打中获得与字符串相同的结果?

请注意,这不是Concatenate columns in apache spark dataframe的重复,因为

  • 我想只使用变换器进入管道框架

  • 并且我不想使用 StringIndexer变压器。

我正在使用Spark 1.6。

0 个答案:

没有答案