gpt4 book ai didi

apache-spark - 即使键的数据非常大,spark 是否将特定键的 RDD[K,V] 的所有元素保存在 "groupByKey"之后的单个分区中?

转载 作者:行者123 更新时间:2023-12-04 04:35:02 26 4
gpt4 key购买 nike

考虑我有一个 PairedRDD,比如说 10 个分区。但是键不是均匀分布的,即所有 9 个有数据的分区都属于一个键,比如 a其余的键说 b,c仅在最后一个分区中有。这由下图表示:
enter image description here

现在如果我做一个 groupByKey在此 rdd ,根据我的理解,同一个键的所有数据最终都会进入不同的分区,或者同一个键的数据不会在多个分区中。如果我错了,请纠正我。

如果是这种情况,那么可能会出现 键的分区 a大小可能不适合工作人员的 RAM .在那种情况下, Spark 会做什么?我的假设就像它会将数据溢出到 worker 的磁盘。
那是对的吗?
或者 spark 如何处理这种情况

最佳答案

Does spark keep all elements (...) for a particular key in a single partition after groupByKey



是的,它确实。这是洗牌的重点。

the partition for key a can be of size that may not fit in a worker's RAM. In that case what spark will do



特定分区的大小在这里不是最大的问题。分区使用惰性 Iterators 表示并且可以轻松存储超过可用内存量的数据。主要问题是分组过程中产生的非惰性本地数据结构。

特定键的所有值都作为 CompactBuffer 存储在内存中所以一个大的群体可能会导致 OOM。即使每条记录都分别放入内存中,您仍然可能会遇到严重的 GC 问题。

一般来说:
  • 在分配给分区的数据量超过可用内存量的情况下,重新分区数据是安全的,虽然不是最佳的性能明智的。
  • 使用不安全PairRDDFunctions.groupByKey在同样的情况下。

  • 备注 :您不应该将此推断到 groupByKey 的不同实现中尽管。特别是 Spark DatasetPySpark RDD.groupByKey使用更复杂的机制。

    关于apache-spark - 即使键的数据非常大,spark 是否将特定键的 RDD[K,V] 的所有元素保存在 "groupByKey"之后的单个分区中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39558547/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com