2016-07-26 10 views
2

私はパーティション・キーで(ORC形式のため)hiveContextでデータフレームを記述しようとしています:スパーク:大文字と小文字が区別partitionBy列

df.write().partitionBy("event_type").mode(SaveMode.Overwrite).orc("/path"); 

私はパーティションにしようとしていた上の列は、大文字と小文字を区別した値を持っているしかし、これは、書き込み中にエラーがスローされる。

Caused by: java.io.IOException: File already exists: file:/path/_temporary/0/_temporary/attempt_201607262359_0001_m_000000_0/event_type=searchFired/part-r-00000-57167cfc-a9db-41c6-91d8-708c4f7c572c.orc 

event_type列が値としてsearchFiredSearchFired両方を有します。しかし、それらのうちの1つをデータフレームから削除すると、正常に書き込むことができます。これをどうすれば解決できますか?

答えて

0

一般に、ファイルシステムの大文字と小文字の違いに頼ってはいけません。

溶液(ScalaのDSLを使用して)のようなものを使用して、同じパーティションに場合によって異なる値を組み合わせることである。

df 
    .withColumn("par_event_type", expr("lower(event_type)")) 
    .write 
    .partitionBy("par_event_type") 
    .mode(SaveMode.Overwrite) 
    .orc("/path") 

これは、パーティションのための余分な列を追加します。問題が発生した場合は、データを読み取るときにdropを使用して削除することができます。

関連する問題