Apache spark Spark 2.0.0:读取许多.gz文件
我有超过150000个.csv.gz文件,它们被组织在几个具有相同前缀的文件夹中(在s3上)。每个文件的大小约为550KB。我的目标是将所有这些文件读入一个数据帧,总大小约为80GB 我正在使用EMR 5.0.0和一个像样的集群:3个c4.8XL实例 (36个vCPU,60 GiB内存,EBS存储:100 GiB) 我正在使用路径中的通配符读取文件:Apache spark Spark 2.0.0:读取许多.gz文件,apache-spark,spark-dataframe,Apache Spark,Spark Dataframe,我有超过150000个.csv.gz文件,它们被组织在几个具有相同前缀的文件夹中(在s3上)。每个文件的大小约为550KB。我的目标是将所有这些文件读入一个数据帧,总大小约为80GB 我正在使用EMR 5.0.0和一个像样的集群:3个c4.8XL实例 (36个vCPU,60 GiB内存,EBS存储:100 GiB) 我正在使用路径中的通配符读取文件: sc.textFile("s3://bucket/directory/prefix*/*.csv.gz") 然后我执行一些映射操作,通过调用to
sc.textFile("s3://bucket/directory/prefix*/*.csv.gz")
然后我执行一些映射操作,通过调用toDF(“col1\u name”、“col2\u name”、“col3\u name”)
将RDD转换为数据帧。然后我很少调用UDF来创建新列
当我调用df.show()
时,操作需要很长时间,而且永远不会完成
我想知道为什么这个过程要花很长时间
读取大量.csv.gz文件是问题吗?
.gz
文件不可拆分,将导致150K个分区。Spark不会喜欢这样:它甚至要与几个10k的分区进行斗争
您可能希望查看aws distcp
或S3DistCp
以首先复制到hdfs,然后使用适当的Hadoop InputFormat
将文件绑定到一起,例如将多个文件合并为一个文件的CombineFileInputFormat
。以下是一个有更多想法的老博客: