2017-07-31 52 views
0

我想使用具有分類值(字符串值)的數據集來訓練機器學習模型。但是,Spark模型不能使用字符串值進行訓練,因此我必須將它們轉換或將它們編入數值中。然而,我發現Spark的唯一字符串轉換器是StringIndexer,但我發現它非常不可靠,因爲它會根據該字符串的頻率對字符串進行索引,並且不能保證在我的測試文件中字符串值的頻率將保持不變。所以我想使用String變量的哈希碼作爲索引它們的一種方式。我可以輕鬆遍歷行並獲取一列字符串值的哈希碼並將它們存儲在列表中。但是,我不知道如何將此List添加到數據集中,以便能夠使用它訓練我的模型。該列表將從上到下排列,因此我試圖找到一種將List轉換爲列的方式,但我不認爲Spark有這個選項。任何關於如何從列表中創建新列並將其添加到我的培訓數據集的想法?使用哈希代碼的索引字符串列

+0

https://stackoverflow.com/questions/35419307/create-array-of-literals-and-columns-from-list-of-strings -in-spark-sql – dumitru

+0

該函數顯然只適用於Scala,並且我正在Java上使用Spark –

+0

此外,該解決方案創建了一列常量值。就我而言,每行中的每個值都是不同的。 –

回答

0

所以我發現Spark有一個叫做hash的函數,它創建一個包含另一列哈希值的int列。

我的問題的解決方案是以下幾點:

import org.apache.spark.sql.functions; 

Column stringCol = new Column("stringValues"); 
trainingDF = trainingDF.withColumn("hashString", functions.hash(stringCol));