【问题标题】:Why "collect" action in spark triggers data collection to driver?为什么 spark 中的“收集”动作会触发数据收集到驱动程序?
【发布时间】:2020-12-26 10:52:11
【问题描述】:

当我们在spark中使用showtakewrite动作时,所有数据都会发送给驱动程序吗?如果不是,那为什么当我们使用collect 时,所有数据都到驱动程序?

【问题讨论】:

    标签: apache-spark hadoop pyspark apache-spark-sql rdd


    【解决方案1】:

    showtake 获取您请求的数据量(例如 20 行)到驱动程序,而 collect 获取 整个 数据帧中的数据,所有分区,到驱动程序。 write 会将整个dataframe输出到一个文件位置,但是一般都是以分区的方式完成的,也就是说每个executor可以直接将其partition中包含的数据写入文件系统。

    【讨论】:

    • 我认为write fetch 不会将数据发送给驱动程序 - 不需要它。只有在只有一个分区或者您之前执行过coalesce(1) 时才会发生这种情况。当你写例如对于 HDFS,每个 executor 可以直接将其本地分区写入 HDFS 文件系统。我的意思是,这与从 HDFS 读取相同 - 文件拆分和分区将提前计算,然后分配给执行程序,每个执行程序将直接从 HDFS 加载
    • 假设我们有一个有 10 个分区的 RDD - 执行repartition(1)coalesce(1) 然后执行write 将使驱动程序收集所有数据并写入HDFS。但是如果我们先做repartition(2)coalesce(2) 然后再做write,那么驱动程序会出现吗?或者数据将在 executors 之间洗牌,将 10 个分区减少到 2 个分区??
    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2019-05-29
    • 2019-01-04
    • 1970-01-01
    • 2015-04-28
    • 2014-03-28
    相关资源
    最近更新 更多