所以我有這樣大的數據幀格式爲:爲什麼Spark MLlib HashingTF只輸出一維矢量?
數據框:org.apache.spark.sql.DataFrame = [id: string, data: string]
數據是一個非常大的組詞/ indentifiers的。它還包含不必要的符號如[「{等等,我需要清理
我給這家清理解決方案是:
val dataframe2 = sqlContext.createDataFrame(dataframe.map(x=> Row(x.getString(0), x.getAs[String](1).replaceAll("[^a-zA-Z,_:]",""))), dataframe.schema)
我需要ML適用於這個數據,所以它應該進入管道這樣。
- 首先符號化,這給了
org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>]
與輸出(不data
列)
[id1,WrappedArray(ab,abc,nuj,bzu...)]
- 停用字詞去除
- HashingTF
org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>, newData: array<string>]
與輸出(無data
和tokenized_data
)
[id1,WrappedArray(ab,abc,nuj,bzu...)]
org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>, newData: array<string>, hashedData: vector]
和矢量看起來像這樣:
[id1,(262144,[236355],[1.0])]
[id2,(262144,[152325],[1.0])]
[id3,(262144,[27653],[1.0])]
[id4,(262144,[199400],[1.0])]
[id5,(262144,[82931],[1.0])]
每個作爲創建的陣列的以前算法的結果可以包含從0到多達幾十個特徵。而且幾乎所有的/大部分的矢量都是一維的。我想用這些數據做一些聚類,但是1維度是一個很大的問題。爲什麼會發生這種情況,我該如何解決?
我發現這個錯誤恰好發生在我清理的數據時我正在。如果我不做清理,HashingTF會正常執行。我在清理時做了什麼錯誤,我如何執行類似的清理而不會搞亂格式呢?