2016-07-26 6 views
2

Ich versuche, einen Datenrahmen in hiveContext zu schreiben (für Ork-Format) mit einer Trennwand Schlüssel:Funke: Groß- und Kleinschreibung partitionBy Spalt

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

jedoch die Säule, auf die ich Partition versuche Groß- und Kleinschreibung Werte hat und dies wirft einen Fehler beim Schreiben:

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 Spalte sowohl searchFired und SearchFired als Werte aufweist. Wenn ich jedoch einen von ihnen aus dem Datenrahmen entferne, kann ich erfolgreich schreiben. Wie löse ich das?

Antwort

0

Es ist im Allgemeinen keine gute Idee, sich auf Fallunterschiede in Dateisystemen zu verlassen.

Die Lösung ist es, Werte zu kombinieren, die von Fall in der gleichen Partition unterscheiden sich mit so etwas wie (mit der Scala DSL):

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

Dies fügt eine zusätzliche Spalte für die Partitionierung. Wenn das Probleme verursacht, können Sie drop verwenden, um es zu entfernen, wenn Sie die Daten lesen.

Verwandte Themen