2017-07-31 14 views
0

カテゴリ値(文字列値)を持つデータセットを使用して機械学習モデルを訓練しようとしています。しかし、SparkモデルはString値で訓練することはできません。そのため、私はそれらを変換したり数値にインデックスを付けなければなりません。しかし、Sparkの唯一のStringトランスフォーマはStringIndexerであることが判明しましたが、その文字列の頻度に基づいてStringsを索引付けするため、非常に信頼性が低いとわかりました。そして、テストファイルに文字列値の頻度同じままです。だから私は文字列変数のハッシュコードをインデックスとして使用することを考えました。私は簡単に行を繰り返し、列の値の列のハッシュコードを取得し、リストに格納することができます。しかし、私はモデルセットを訓練できるように、このリストをデータセットに追加する方法を知らない。リストは一番上の行から一番下の行まで並べられるので、そのリストを列に変換する方法を見つけようとしていましたが、Sparkにそのオプションがあるとは思いません。リストから新しい列を作成し、それを訓練データセットにどのように追加することができますか?インデックス文字列でHashcodeを使用

+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)); 
関連する問題