我正在尝试使用分区键在hiveContext(for orc格式)中写出数据帧:
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
列同时包含searchFired
和SearchFired
作为值。但是,如果我从数据帧中删除其中一个,那么我就能成功写入。我该如何解决这个问题?
答案 0 :(得分:0)
依赖文件系统中的案例差异通常不是一个好主意。
解决方案是使用类似的东西(使用Scala DSL)将不同情况下的值组合到同一个分区中:
df
.withColumn("par_event_type", expr("lower(event_type)"))
.write
.partitionBy("par_event_type")
.mode(SaveMode.Overwrite)
.orc("/path")
这会为分区添加额外的列。如果这会导致问题,您可以在阅读数据时使用drop
将其删除。