Spark sc parallelize指定分区数

时间:2017-06-09 16:21:15

标签: apache-spark

我想在Spark中下载文件列表并对其进行一些处理。下载量很大,内存占用量约为40GB。因此,我希望每个执行程序下载一个文件,压平它并对其进行操作。有没有办法可以用sc.parallelize来做到这一点?我目前的做法是:

val list = List("fileToDownload1", "fileToDownload2", ...)
sc.parallelize(list, list.length)
  .map(file => downloadFile(file))
  .flatMap(fileContents => fileContents)
  .map(row => someOperation(row))

但它会拆分列表,以便每个执行程序最终都有多个下载路径。我认为这是因为list.length被解释为执行者中的每个任务。作为临时解决方法,我将spark.executor.cores设置为1,以便每个执行程序获取一个文件。但是,它最终会减慢someOperation(行)部分的速度。

所以,我想要的是sc.parallelize要拆分,以便每个执行器在列表中获得一个元素。有没有办法在Spark中做到这一点?

由于

0 个答案:

没有答案