【问题标题】:Does spark automatically cache some results?spark会自动缓存一些结果吗?
【发布时间】:2015-07-02 21:12:35
【问题描述】:

我两次运行一个动作,第二次运行时间很少,所以我怀疑spark会自动缓存一些结果。但我确实找到了任何来源。

我正在使用 Spark1.4。

doc = sc.textFile('...')
doc_wc = doc.flatMap(lambda x: re.split('\W', x))\
            .filter(lambda x: x != '') \
            .map(lambda word: (word, 1)) \
            .reduceByKey(lambda x,y: x+y) 
%%time
doc_wc.take(5) # first time
# CPU times: user 10.7 ms, sys: 425 µs, total: 11.1 ms
# Wall time: 4.39 s

%%time
doc_wc.take(5) # second time
# CPU times: user 6.13 ms, sys: 276 µs, total: 6.41 ms
# Wall time: 151 ms

【问题讨论】:

    标签: caching apache-spark


    【解决方案1】:

    来自the documentation

    Spark 还会在 shuffle 操作(例如 reduceByKey)中自动持久化一些中间数据,即使没有用户调用 persist。这样做是为了避免在洗牌期间节点失败时重新计算整个输入。如果用户打算重用它,我们仍然建议用户在生成的 RDD 上调用 persist。

    底层文件系统也将缓存对磁盘的访问。

    【讨论】:

    • 请注意,尽管文档使用了“persist”一词,但这并不使用与调用persistcache 相同的缓存机制。 Spark 将 shuffle 输出写入不是 RDD 的磁盘。这很重要,因为 shuffle 期间的单个节点故障会阻塞 shuffle 下游的 所有 操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多