Spark:读取多个文件并忽略丢失的文件

时间:2016-03-09 11:49:58

标签: apache-spark

我有一个▶ class A ▷ def a1 ; puts @a ; end ▷ def a2 ; @a = 42 ; end ▷ end ▶ a = A.new #⇒ #<A:0x000000026d2908> ▶ a.a2 #⇒ 42 ▶ a.a1 #⇒ 42 ,其中包含一些文件的路径。 该数组是自动生成的,因此无法保证文件存在。

我想阅读所有这些路径,将现有路径加载到RDD中,并忽略不存在的路径。

我尝试过以下操作:

Array[String]

但看起来它没有成功避免不存在的文件,我在尝试import scala.util.Try val arrayOfFilePaths: Array[String] = ["path1", "path2", "path3", "path4"] val allRecords = sc.union(arrayOfFilePaths.map(p => Try(sc.textFile(p))).filter(_.isSuccess).map(_.get)) 时收到以下错误:

allRecords.collect()

这里有什么错误吗?

1 个答案:

答案 0 :(得分:3)

好的,我已经找到了解决方案。

我在加载文件之前已经过滤了数组。

import java.nio.file.{Paths, Files}

val filteredPaths = arrayOfFilePaths.filter(p => Files.exists(Paths.get(p))).mkString(",")

然后我可以加载这些文件

val allRecords = sc.textFile(filteredPaths)