2017-10-06 70 views
0

我只想知道在转换和操作之间textFile被更改时会发生什么。 例如,我从1MB的textFile创建RDD并执行flatMap转换,但在调用动作.collect之前,我用100 MB的textFile替换了本地文件系统中具有相同名称的文件。运算符生成图形

由于Operator Graph是在动作调用之后生成的,因此不应该从大文件计算DAG?

// RDD created from 1 MB File size 
val a = sc.textFile("c:/SampleData.txt").flatMap(x => x.split(" ")) 

// Replace the textfile SampleData.txt(1 MB size) with SampleData (100 MB size) 
a.collect 

但当我这样做,我得到这个例外

Caused by: java.io.EOFException: Cannot seek after EOF 

回答

0

通常星火甚至不验证RDD输入的存在(也有例外),直至实际需要的数据。 Spark会在调用动作时使用新文件计算分割。

0

Spark将使用执行操作时可用的文件。 Spark使用懒惰的机制。当我们在RDD上编写转换时,Spark所做的只是为操作创建一个DAG。只要您调用某个涉及RDD的操作,就会执行整个执行过程。因此,在这种情况下,它将使用可用的最新文件。

希望这会有所帮助!