我在VectorAssembler
遇到一种非常奇怪的行为,我想知道是否有其他人看过这个。
我的情景很简单。我解析了CSV
文件中的数据,其中我有一些标准Int
和Double
字段,我还计算了一些额外的列。我的解析函数返回:
val joined = countPerChannel ++ countPerSource //two arrays of Doubles joined
(label, orderNo, pageNo, Vectors.dense(joinedCounts))
我的main函数使用解析函数,如下所示:
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示例,看不出我的代码有什么问题。你能?