2016-11-18 78 views
1

我在阅读大量文本文件时由Spark创建的任务数量有点困惑。火花如何确定任务数量?

下面是代码:

val files = List["path/to/files/a/23", 
       "path/to/files/b/", 
       "path/to/files/c/0"] 
val ds = spark.sqlContext.read.textFile(files :_*) 
ds.count() 

每个文件夹a, b, c的包含24个文件,以便有因为完整b文件夹中共有26个文件被读出。现在,如果我执行一个动作,例如.count(),则Spark UI会显示我有24个任务。但是,我认为有26个任务,如每个分区1个任务和每个文件1个分区。

如果有人能够让我更深入地了解实际发生的事情,那将会很棒。

+1

什么是你正在使用作业核心的总数是多少?你有没有设置任何配置? –

+0

为了便于理解。你可以发布你的代码和你的spark ui细节。 –

+0

@SimonSchiff我使用了8个内核,而且我没有配置我知道的任何东西。但是,这似乎是正确的方向。我试着在一个更大的机器上执行代码,它有预期的26个任务。 –

回答

0

使用Hadoop格式加载文本文件。分区的数量取决于:如果

  • mapreduce.input.fileinputformat.split.minsize
  • mapreduce.input.fileinputformat.split.maxsize
  • minPartitions论点提供
  • 块大小
  • 压缩如果存在的话(splitable /不splitable)。

你会发现这里例如计算:Behavior of the parameter "mapred.min.split.size" in HDFS