2016-11-27 121 views
0

2小時後,spark工作正在運行,將一些tgz文件轉換爲實木複合地板。 作業新數據追加到現有的實木複合地板在S3:如何避免在追加新數據時從S3中讀取舊文件?

df.write.mode("append").partitionBy("id","day").parquet("s3://myBucket/foo.parquet") 

在火花提交輸出,我可以看到顯著的時間花費在閱讀舊地板的文件,例如:

16/11/27 14:06:15信息S3NativeFileSystem:打開's3://myBucket/foo.parquet/id=123/day=2016-11-26/part-r-00003-b20752e9-5d70-43f5-b8b4- 50b5b4d0c7da.snappy.parquet'用於閱讀

16/11/27 14:06:15信息S3NativeFileSystem:碼流 'foo.parquet/id = 123 /天= 2016年11月26日/部分-R-00003-e80419de-7019-4859-bbe7-dcd392f6fcd3.snappy.parquet」 尋求位置 '149195444'

它看起來像這樣操作花費小於1第二個文件,但文件數量隨時間增加(每個附加文件增加新文件),這使我認爲我的代碼將無法縮放。

任何想法如何避免從s3讀舊的地板文件,如果我只需要添加新的數據?

我使用EMR 4.8.2和DirectParquetOutputCommitter:

sc._jsc.hadoopConfiguration().set('spark.sql.parquet.output.committer.class', 'org.apache.spark.sql.parquet.DirectParquetOutputCommitter') 

回答

1

我通過寫數據框以EMR HDFS,然後用S3-DIST-CP上傳到檢察院S3

解決這個問題
相關問題