1

所以我有這樣大的數據幀格式爲:爲什麼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適用於這個數據,所以它應該進入管道這樣。

  1. 首先符號化,這給了

org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>]

與輸出(不data列)

[id1,WrappedArray(ab,abc,nuj,bzu...)]

  • 停用字詞去除
  • org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>, newData: array<string>]

    與輸出(無datatokenized_data

    [id1,WrappedArray(ab,abc,nuj,bzu...)]

  • HashingTF
  • 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會正常執行。我在清理時做了什麼錯誤,我如何執行類似的清理而不會搞亂格式呢?

    回答

    1

    [^a-zA-Z,_:]匹配所有空格。它會產生一個連續的字符串,當它被標記時會創建一個單一的標記,並帶有一個條目。您應該排除空格或使用正則表達式標記器作爲替換。