我有一个spark应用程序,可以对各种文件夹中的文件执行某些任务“ x”。任务“ x”对于每个文件夹都是独立的。所以我想并行运行。以下是我如何使用并行集合实现示例代码。
//Get list of file prefixes
//e.g., [hello1_, hello2_, hello3_]
var prefixNamesList = getPrefixNameList(envVar.getFolderListFilePath()).par
prefixNamesList.foreach { prefixname =>
println("prefixname is " + prefixname)
// Get all the filenames starting with the prefixname
// e.g., [hello1_xyz.txt, hello1_abc.txt]
var fileNamesList = dirUtils.findMultipleFiles(source, prefixname)
if (fileNamesList == "" || fileNamesList.isEmpty) {
println("FilesNamesList is Empty")
} else {
println("list of files are " + fileNamesList)
// Has to print 'hello1_xyz.txt' & 'hello1_abc.txt' in the first iteration
for (fileName <- fileNamesList) {
println("filename is " + fileName)
}
}
}
例如,如果我有70个文件夹,并且每个文件夹都有2个文件,它们以相应的前缀(“ hello1_”)开头,则逻辑应执行最后一条打印消息“文件名是“ 140次。
当我在本地模式下运行应用程序时:
spark-submit --class "com.test.DataMover" --driver-memory 4g --master "local[*]" Spark-test-jar-with-dependencies.jar
该消息出现140次,这是正确的。但 当我以纱线簇模式运行应用程序时:
spark-submit --class "com.test.DataMover" --driver-memory 4g --master yarn --deploy-mode cluster Spark-test-jar-with-dependencies.jar
该消息出现了700次,这意味着循环重复了5次。有人可以帮我解决问题吗?
谢谢。