Apache spark 结合矢量汇编和HashingTF变压器的Spark管道

Apache spark 结合矢量汇编和HashingTF变压器的Spark管道,apache-spark,apache-spark-sql,apache-spark-ml,Apache Spark,Apache Spark Sql,Apache Spark Ml,让我们定义一个Spark管道,它将几列组合在一起,然后应用功能散列: val df=sqlContext.createDataFrame(Seq((0.0,1.0,2.0),(3.0,4.0,5.0)).toDF(“colx”,“coly”,“colz”) val va=new VectorAssembler().setInputCols(数组(“colx”、“coly”、“colz”)).setOutputCol(“ft”) val hashIt=new HashingTF().setInpu

让我们定义一个Spark管道,它将几列组合在一起,然后应用功能散列:

val df=sqlContext.createDataFrame(Seq((0.0,1.0,2.0),(3.0,4.0,5.0)).toDF(“colx”,“coly”,“colz”)
val va=new VectorAssembler().setInputCols(数组(“colx”、“coly”、“colz”)).setOutputCol(“ft”)
val hashIt=new HashingTF().setInputCol(“ft”).setOutputCol(“ft2”)
val pipeline=new pipeline().setStages(数组(va,hashIt))
使用管道装配管道。装配(df)抛出:

java.lang.IllegalArgumentException:需求失败:输入失败 列必须为ArrayType,但已获取 org.apache.spark.mllib.linalg。VectorUDT@f71b0bce


是否有一个转换器允许
vectorsembler
HashingTF
一起工作?

就个人而言,我甚至不会为此使用管道API,一个
数组
函数就足够了

val df=sqlContext.createDataFrame(Seq((0.0,1.0,2.0)、(3.0,4.0,5.0)))
.toDF(“colx”、“coly”、“colz”)
.withColumn(“ft”,数组('colx,'coly,'colz))
val hashIt=new HashingTF().setInputCol(“ft”).setOutputCol(“ft2”)
val res=hashIt.transform(df)
res.show(假)
# +----+----+----+---------------+------------------------------+
#| colx | coly | colz | ft | ft2|
# +----+----+----+---------------+------------------------------+
# |0.0 |1.0 |2.0 |[0.0, 1.0, 2.0]|(262144,[0,1,2],[1.0,1.0,1.0])|
# |3.0 |4.0 |5.0 |[3.0, 4.0, 5.0]|(262144,[3,4,5],[1.0,1.0,1.0])|
# +----+----+----+---------------+------------------------------+
作为问题的后续步骤,为了在列数>3的情况下推广array函数的应用,以下步骤将所有列连接为一列,并使用所有所需列的数组:

val df2=sqlContext.createDataFrame(Seq((0.0,1.0,2.0)、(3.0,4.0,5.0)))
.toDF(“colx”、“coly”、“colz”)

val cols=(对于(i个人而言,我甚至不会为此使用管道API,
array
函数就足够了

val df=sqlContext.createDataFrame(Seq((0.0,1.0,2.0)、(3.0,4.0,5.0)))
.toDF(“colx”、“coly”、“colz”)
.withColumn(“ft”,数组('colx,'coly,'colz))
val hashIt=new HashingTF().setInputCol(“ft”).setOutputCol(“ft2”)
val res=hashIt.transform(df)
res.show(假)
# +----+----+----+---------------+------------------------------+
#| colx | coly | colz | ft | ft2|
# +----+----+----+---------------+------------------------------+
# |0.0 |1.0 |2.0 |[0.0, 1.0, 2.0]|(262144,[0,1,2],[1.0,1.0,1.0])|
# |3.0 |4.0 |5.0 |[3.0, 4.0, 5.0]|(262144,[3,4,5],[1.0,1.0,1.0])|
# +----+----+----+---------------+------------------------------+
作为问题的后续步骤,为了在列数>3的情况下推广array函数的应用,以下步骤将所有列连接为一列,并使用所有所需列的数组:

val df2=sqlContext.createDataFrame(Seq((0.0,1.0,2.0)、(3.0,4.0,5.0)))
.toDF(“colx”、“coly”、“colz”)
val cols=(对于(i