【问题标题】:Does Spark Always Read Data When an Action Occurs当一个动作发生时,Spark 是否总是读取数据
【发布时间】:2020-03-11 20:36:13
【问题描述】:

我是 Spark 的新手,我了解到存在转换和操作。转换返回新的 rdds 和数据帧,并且操作对它们进行操作。除非未调用操作,否则不会执行任何转换。除非请求任何操作,否则转换只是沿袭中的步骤。所以,当我读取一个数据帧时,它也是一个转换,如果我在读取同一个数据帧后调用两个动作,是读取两次还是只读取一次然后对它们执行动作?

df = ss.read.csv('test.csv')
df.count()
df.take(5)

【问题讨论】:

    标签: dataframe pyspark lazy-evaluation


    【解决方案1】:

    一般而言,操作会导致执行,如您所说的那样读取。这不是操作的情况,而是实际执行的情况——除了一些需要执行的作业的例外情况。

    如果您没有缓存/持久化数据,您将多次读取数据,除非发生一些跳过的操作。

    可以优化延迟执行和沿袭平均代码。

    像 take(n) 这样的东西被优化了。 show 也有特殊的考虑。

    【讨论】:

    • 为了完整起见,我要补充一点,两次读取数据并不是一件坏事——它通常可以作为一个优势;)
    • @GrzegorzSkibinski 你可以详细说明。
    • take是一个特殊的优化案例;对于计数,关于是否所有内容都需要阅读 afaik 存在争议,这可能会被优化,但我认为目前是这样,所以是的
    • 刚检查,没有跳过,都读了,但是take(n)不需要读所有的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2015-06-22
    • 1970-01-01
    • 2013-12-22
    • 2021-01-02
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多