2017-05-18 60 views
0

我使用databrick spark-avro(對於Spark 1.5.5.2)將從ElasticSearch提取的DataFrame保存爲Avro到HDFS。我已經做了我的數據框一些處理之後,我使用下面的命令保存在HDFS數據:在使用Spark的相同路徑中多次保存avro

df.write.avro("my/path/to/data") 

一切正常,我可以使用蜂巢讀我的數據。我當時面臨的最大問題是,我無法將數據寫入相同路徑(例如,使用"my/path/to/data"作爲輸出運行我的腳本兩次)。只要我需要增加數據,我該如何解決這個問題?我想一些解決方法,像

  • 每天都在變化的輸出目錄(創建分區),或
  • 在TMP文件夾中保存的數據,然後將它們插入到「主」表

但我想知道我是否能找到一種方法在Spark上真正解決這個問題。

回答

1

您應提供適當的模式。覆蓋如果要替換現有數據:

df.write.mode("overwrite").avro("my/path/to/data") 

如果要添加附加:

df.write.mode("append").avro("my/path/to/data") 
+0

謝謝! :)對不起,這個小問題,我剛開始使用Spark –

1

如果你的數據不經常更新的追加工作細如

df.write.mode(SaveMode.Append).avro("outputpath") 

如果你經常更新然後它創建了大量的文件(它可能是空文件) 爲了解決這個問題,你需要

  • 閱讀以前的數據,並追加到它
  • 存放在臨時目錄
  • 刪除原來的目錄和
  • 重命名臨時目錄中原有

希望這有助於

相關問題