2016-11-23 21 views
0

我试图得到一些RDDS的联合工会。 RDD正通过SparkContext.textFile读入,但有些可能不存在于文件系统中。寻找RDDS的可能不存在

val rdd1 = Try(Repository.fetch(data1Path)) 
val rdd2 = Try(Repository.fetch(data2Path)) 
val rdd3 = Try(Repository.fetch(data3Path)) 
val rdd4 = Try(Repository.fetch(data4Path)) 

val all = Seq(rdd1, rdd2, rdd3, rdd4) 
val union = sc.union(all.map {case Success(r) => r}) 
val results = union.filter(some-filter-logic).collect 

但是由于懒惰的评估,所有这些Try语句评估为Success不管文件是否存在与否,和我在评价结束了一个FileNotFoundExceptioncollect被调用。

有没有办法解决这个问题?

回答

0

你可以尝试运行一个循环来检查文件是否存在,并在同一回路可以创建RDDS,并得到工会。 OR 可以使用wholeTextFiles API来读取所有存在于一个目录键,值对的文件。

val rdd=sc.wholeTextFiles(path, minPartitions) 

如果任何文件也将是空的,它不会产生任何问题。