我想在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中做到这一点?
由于