Spark 2.0.0:读取许多.gz文件

时间:2017-06-19 19:50:28

标签: apache-spark spark-dataframe

我有超过150,000个.csv.gz文件,这些文件组织在几个具有相同前缀的文件夹中(在s3上)。每个文件的大小约为550KB。我的目标是将所有这些文件读入一个DataFrame,总大小约为80GB。

我正在使用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转换为DataFrame。然后,我几乎没有调用UDF来创建新列。

当我致电df.show()时,操作需要很长时间才能完成。

我想知道为什么这个过程需要很长时间?

是否读取了大量的.csv.gz文件?

1 个答案:

答案 0 :(得分:3)

.gz个文件可拆分,将导致150K分区。 Spark会像那样:它甚至会破坏几个10k的分区。

您可能希望首先查看aws distcpS3DistCp以复制到hdfs - 然后使用适当的Hadoop InputFormat捆绑文件,例如CombineFileInputFormat以及许多文件合而为一。这是一个较旧的博客,有更多的想法:http://inquidia.com/news-and-info/working-small-files-hadoop-part-3