我正在使用spark 1.6.1,並試圖將數據幀保存爲orc格式。Spark數據幀saveAsTable vs保存
我面臨的問題是保存方法非常慢,每個執行程序需要大約6分鐘50M的獸人文件。 這是我現在的儲蓄數據幀
dt.write.format("orc").mode("append").partitionBy("dt").save(path)
我試着用saveAsTable到還使用獸人格式的蜂巢表,這似乎是快了大約20%至50%的速度,但這種方法有其自己的問題 - 似乎任務失敗時,由於文件已存在,重試將始終失敗。 這是我現在的儲蓄數據幀
dt.write.format("orc").mode("append").partitionBy("dt").saveAsTable(tableName)
是否有一個原因Save方法是如此之慢? 我做錯了什麼?
6分鐘寫入50M文件並不那麼慢。聽起來像很多文件!每個人有多大?有多少執行者?如果它是每行一個文件,那就太多了。如果它們適用於您的存儲系統,以及在典型查詢中使用的節點/執行程序的數量,那麼可能有50M是好的,但我對此表示懷疑。如果每個50M文件都是1G,那麼〜47PB,所以我懷疑這一點。如果每個都是1MB,那麼它就是47TB,我建議文件大小太小而無法有效地查詢表格。總數據量是多少? – Davos
它實際上是50兆文件。 – user1960555
像,它只是一個50MB文件?如果它只是一個小文件,那麼沒有太多的點分區。有可能您的dt字段太多,最終會爲每行創建分區。例如。如果是像「2017-01-01 14:52:22」那樣的時間戳/日期時間,那麼每隔一秒鐘就會發生分區,然後爲每個分區寫入一個orc文件。 50MB可能是一個小文件,但它可能是很多具有不同時間戳的行。例如如果每一行是〜8K,那麼~6400行,這是很多文件I/O。 – Davos