在spark中创建特定rdd时,例如:
lines = sc.textFile("README.md")
然后在这个rdd上调用一个转换:
pythonLines = lines.filter(lambda line: "Python" in line)
如果对这个转换后的过滤器rdd调用一个操作(例如 pythonlines.first
)他们说的是什么意思 an RDD will be recomputed ones again each time you run an action on them
? 我认为您使用textfile方法创建的原始rdd在调用 filter
对原始rdd的改造。那么它是否会重新计算最近转换的rdd,在本例中,它是我使用过滤器转换生成的rdd?如果我的假设是正确的,我真的不明白为什么那是必要的?
1条答案
按热度按时间rryofs0p1#
在spark中,rdd被延迟地评估。这意味着如果你只是写
由于您从未使用过结果,因此程序将在不读取文件的情况下退出。如果你写了这样的东西:
需要进行的计算
lineLength
将做两次,因为你在两个不同的地方重复使用它。为了避免这种情况,您应该在以两种不同的方式使用rdd之前将结果持久化你也可以看看https://spark.apache.org/docs/latest/programming-guide.html#rdd-坚持。希望我的解释不要太混乱!