Sparkトラブルシューティング「org.apache.spark.sql.AnalysisException: Reference 'Hoge' is ambiguous」


下記のようなエラーが出力され少しハマったので原因と対処ほうについて。

org.apache.spark.sql.AnalysisException: Reference 'Hoge' is ambiguous, could be: Hoge#5, Hoge#96.

原因

読み込みデータに大文字と小文字の違いだけで同じスペルのカラムが存在していたことが原因でした。
hogeとHogeみたいな。
Sparkの内部のスキーマはデフォルトでは大文字と小文字を区別しないようです。jsonなどでは大文字と小文字で別々のカラム(キー)で値を持てるのでこういったエラーが出ることがあります。

対処

データを修正

大文字と小文字で同じスペルになるカラムがなくなるようにデータを修正する。

オプションを使ってSparkが大文字と小文字を区別するようにする

spark.sql.caseSensitivという設定項目があるので、これをtrueにすると大文字と小文字を区別するようになります。

コード中で設定するには下記のようにします。

sqlContext.sql("set spark.sql.caseSensitive=false")