Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark 2.0.0:读取许多.gz文件_Apache Spark_Spark Dataframe - Fatal编程技术网

Apache spark Spark 2.0.0:读取许多.gz文件

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

我有超过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")
然后我执行一些映射操作,通过调用
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
。以下是一个有更多想法的老博客: