我正在运行一个Spark作业,它花费了太长的时间来处理输入文件。输入文件以Gzip格式为6.8GB,包含110M行文本。我知道它是Gzip格式,因此它不可分割,只有一个执行器将用于读取该文件。
作为我的调试过程的一部分,我决定查看将那个gzip文件转换为parquet需要多长时间。我的想法是,一旦我将其转换为parquet文件,然后如果我在该文件上运行我的原始Spark作业,那么它将使用多个执行器并且输入文件将被并行处理。
但即使是小的作业也比我预期的时间长。这是我的代码:
当我在我的笔记本电脑(16 GB RAM)上提取该文件时,只需要不到2分钟的时间。当我在Spark集群上运行它时,我的期望是它将花费相同甚至更少的时间,因为我正在使用的执行器内存为58 GB。但是它花了约20分钟。
我错过了什么?如果听起来很业余,我很抱歉,但我在Spark方面还是新手。
在gzip文件上运行Spark作业的最佳方法是什么?假设我没有创建其他文件格式(bzip2、snappy、lzo)的选项。
作为我的调试过程的一部分,我决定查看将那个gzip文件转换为parquet需要多长时间。我的想法是,一旦我将其转换为parquet文件,然后如果我在该文件上运行我的原始Spark作业,那么它将使用多个执行器并且输入文件将被并行处理。
但即使是小的作业也比我预期的时间长。这是我的代码:
val input = sqlContext.read.text("input.gz")
input.write.parquet("s3n://temp-output/")
当我在我的笔记本电脑(16 GB RAM)上提取该文件时,只需要不到2分钟的时间。当我在Spark集群上运行它时,我的期望是它将花费相同甚至更少的时间,因为我正在使用的执行器内存为58 GB。但是它花了约20分钟。
我错过了什么?如果听起来很业余,我很抱歉,但我在Spark方面还是新手。
在gzip文件上运行Spark作业的最佳方法是什么?假设我没有创建其他文件格式(bzip2、snappy、lzo)的选项。