【发布时间】:2017-03-23 04:40:13
【问题描述】:
我遇到了来自 VectorAssembler 的一个非常奇怪的行为,我想知道是否有其他人看到过这个。
我的场景非常简单。我从CSV 文件中解析数据,其中有一些标准的Int 和Double 字段,并且我还计算了一些额外的列。我的解析函数返回这个:
val joined = countPerChannel ++ countPerSource //two arrays of Doubles joined
(label, orderNo, pageNo, Vectors.dense(joinedCounts))
我的主函数使用这样的解析函数:
val parsedData = rawData.filter(row => row != header).map(parseLine)
val data = sqlContext.createDataFrame(parsedData).toDF("label", "orderNo", "pageNo","joinedCounts")
然后我像这样使用VectorAssembler:
val assembler = new VectorAssembler()
.setInputCols(Array("orderNo", "pageNo", "joinedCounts"))
.setOutputCol("features")
val assemblerData = assembler.transform(data)
因此,当我在进入VectorAssembler 之前打印一行数据时,它看起来像这样:
[3.2,17.0,15.0,[0.0,0.0,0.0,0.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,2.0]]
在 VectorAssembler 的转换函数之后,我打印同一行数据并得到:
[3.2,(18,[0,1,6,9,14,17],[17.0,15.0,3.0,1.0,4.0,2.0])]
到底发生了什么? VectorAssembler 做了什么?我仔细检查了所有计算,甚至遵循了简单的 Spark 示例,但看不出我的代码有什么问题。你可以吗?
【问题讨论】:
标签: scala apache-spark apache-spark-mllib apache-spark-ml