首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark:读取文本文件后的重新划分策略

问Spark:读取文本文件后的重新划分策略
EN

Stack Overflow用户
提问于 2015-01-24 23:37:18
回答 1查看 13.1K关注 0票数 14

我已经这样启动了我的集群:

代码语言:javascript
复制
/usr/lib/spark/bin/spark-submit --class MyClass --master yarn-cluster--num-executors 3 --driver-memory 10g --executor-memory 10g --executor-cores 4 /path/to/jar.jar

我做的第一件事是读取一个大的文本文件,并对其进行计数:

代码语言:javascript
复制
val file = sc.textFile("/path/to/file.txt.gz")
println(file.count())

在执行此操作时,我看到只有一个节点实际正在读取文件并执行计数(因为我只看到一个任务)。这是意料之中的吗?我应该在之后重新划分我的RDD,或者当我使用map reduce函数时,Spark会为我做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-25 01:47:10

看起来您正在处理一个gzipped文件。

引用my answer here

我认为你遇到了一个非常典型的问题,那就是gzipped文件不能并行加载。更具体地说,单个gzipped文件不能由多个任务并行加载,因此Spark会加载一个任务,从而为您提供一个带有一个分区的RDD。

您需要在加载RDD之后显式地对其进行重新分区,以便可以在其上并行运行更多的任务。

例如:

代码语言:javascript
复制
val file = sc.textFile("/path/to/file.txt.gz").repartition(sc.defaultParallelism * 3)
println(file.count())

如果您在读取常规文本文件或使用bzip2等可拆分压缩格式压缩的文件时设置了minPartitions,您将看到Spark实际上会并行部署该数量的任务(直到集群中可用内核的数量)来读取该文件。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28127119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档