我使用Spark shell(Spark 1.6.2)运行一个非常简单的查询来计算一堆.gz文件中的行数,如下所示:

sc.textFile("s3a://bucket-name/prod/data-source/2017-05-05/*/").count

2017-06-06 21:33:21 INFO SparkContext:58 - 来自textFile的创建广播2:28 2017-06-06 21:33:24 INFO FileInputFormat:249 - 要处理的总输入路径:1700 2017-06- 06 21:33:24 INFO SparkContext:58 - 开始工作:数:28 2017-06-06 21:33:24 INFO SparkContext:58 - 在DAGScheduler.scala广播创建广播3:1006 res1:Long = 433733191

返回#需要不到 10 seconds .

但是当我使用Java在测试应用程序中编写相同的逻辑时,它需要大约 3 minutes

new SparkContextFactory(appName).textFile("s3a://bucket-name/prod/data-source/2017-05-05/*/").count()

这是输出打印输出的片段:

2017-06-06 22:40:20 INFO执行者:58 - 在阶段0.0中运行任务195.0(TID 195)2017-06-06 22:40:20 INFO HadoopRDD:58 - 输入拆分:s3a://桶 - name / prod / data-source / 2017-05-05 / 20170505_1493980530 / part-r-00095.gz:0 3732508 2017-06-06 22:40:20 INFO CodecPool:181 - 获得全新的解压缩程序[.gz] 2017-06-06 22:40:21 INFO Executor:58 - 完成任务194.0,阶段0.0(TID 194) . 2336字节结果发送给驱动程序2017-06-06 22:40:21 INFO执行程序:58 - 运行任务196.0在阶段0.0(TID 196)2017-06-06 22:40:21 INFO HadoopRDD:58 - 输入拆分:s3a ://bucket-name/prod/data-source/2017-05-05/20170505_1493980530/part-r-00096.gz:0 3727204 2017-06-06 22:40:21 INFO CodecPool:181 - 全新decompressor [.gz] 2017-06-06 22:40:22 INFO执行者:58 - 完成任务195.0,阶段0.0(TID 195) . 2336字节结果发送到驱动程序2017-06-06 22:40:22 INFO执行程序:58 - 运行任务197.0在阶段0.0(TID 197)2017-06-06 22:40:22 INFO HadoopRDD:58 - 输入拆分:s3a ://bucket-name/prod/data-source/2017-05-05/20170505_1493980530/part-r-00097.gz:0 3734183 2017-06-06 22:40:22 INFO CodecPool:181 - 全新decompressor [.gz] 2017-06-06 22:40:22 INFO执行者:58 - 完成任务196.0在阶段0.0(TID 196) . 2336字节结果发送给驱动程序

在s3a:// bucket-name / prod / data-source / 2017-05-05 /下有多个子文件夹,每个子文件夹都有数百个.gz文件,每个文件大约4MB .

令我感到困惑的是为什么这两种方式有多少时间差价?感谢是否有人可以分享一些灯?