Apache Spark: Jak zapisać DataFrame w postaci jednego pliku na HDFS?

Problem

Jeśli chce zapisać DataFrame jako plik na HDFS to może się pojawić problem, że zostanie on zapisany w postaci wielu plików. Jest to jak najbardziej poprawne zachowanie i wynika to ze zrównoleglania pracy w Apache Spark. Jednak jeśli chcemy wymusić zapis do jednego pliku należy zmienić partycjonowanie DataFrame do jednej partycji. W tym celu należy przed zapisem wywołać metodę „coalesce” i podać ilość partycji.

Rozwiązanie

Poniższy przykład przedstawia w jaki sposób zapisać dowolny DataFrame to pliku CSV. Dodatkowo przedstawiłem kilka dostępnych opcji tj.:

  • Mode – dostępne opcje:
    • overwrite – zawsze nadpisuje plik
    • append – dodaj do istniejącego pliku jeśli istnieje
    • igonre – zignoruj jeśli istnieje
    • error, errorIfExists, default – niech powstanie błąd jeśli plik istnieje. (opcja domyślna).
  • header – czy na początku pliku ma być nagłówek
  • delimiter – separator kolumn w pliku
  • quoteMode – jeśli ustawimy na „true” to każda kolumna będzie zapisana pomiędzy cudzysłowie. 
quoteMode = true „Spark”,”is”,”Cool”
quoteMode = false Spark,is,Cool
myDataFrame.coalesce(1).write.format("com.databricks.spark.csv")
  .mode("overwrite")
  .option("header", "true")
  .option("delimiter", ",")
  .option("quoteMode", "true")
  .save("<output_hdfs_path>")

 

Jeśli spodobał Ci się ten post to napisz proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Z góry dzięki!

Please follow and like us:
error

Dodaj komentarz

Close Menu
Social media & sharing icons powered by UltimatelySocial
error

Enjoy this blog? Please spread the word :)