2017-06-19 63 views
2

我有超過15萬個.csv.gz文件,在具有相同前綴的幾個文件夾(在S3)舉辦。每個文件的大小約爲550KB。我的目標是將所有這些文件讀入一個DataFrame,總大小約爲80GB。星火2.0.0:看了很多的.gz文件

我正在使用EMR 5.0.0的體​​面的羣集:c4.8xlarge的3個實例 (36 vCPU,60 GiB內存,EBS存儲:100 GiB)。

我在路徑中使用通配符讀取文件:

sc.textFile("s3://bucket/directory/prefix*/*.csv.gz") 

然後我做了一些地圖操作,我通過調用toDF("col1_name", "col2_name", "col3_name")改造RDD成數據幀。然後,我會對UDF進行一些調用來創建新列。

當我打電話df.show()操作採取長期和寫不完。

但不知爲何,進程正在很長的時間?

是讀取大量.csv.gz文件是什麼問題?

回答

3

.gz文件是不是可拆分,將導致150K分區。火花將不是這樣的:它甚至掙扎着幾個10k的分區。

你可能要考慮aws distcpS3DistCp複製到HDFS第一 - 然後使用適當的爲CombineFileInputFormat這樣Hadoop InputFormat即gloms許多文件合併成一個捆綁的文件。這裏是一個有更多想法的老博客:http://inquidia.com/news-and-info/working-small-files-hadoop-part-3