gpt4 book ai didi

python - pyspark 使用 partitionby 对数据进行分区

转载 作者:太空狗 更新时间:2023-10-29 18:28:43 76 4
gpt4 key购买 nike

我了解 partitionBy 函数对我的数据进行分区。如果我使用 rdd.partitionBy(100),它会将我的数据按键分成 100 个部分。即与相似键关联的数据将被分组在一起

  1. 我的理解正确吗?
  2. 分区数等于分区数是否可取 可用内核?这会使处理更有效率吗?
  3. 如果我的数据不是键值格式怎么办。我还能使用这个功能吗?
  4. 假设我的数据是 serial_number_of_student,student_name。在这个 情况下我可以按 student_name 而不是 序列号?

最佳答案

  1. 不完全是。 Spark,包括 PySpark,is by default using hash partitioning .排除相同的键,分配给单个分区的键之间没有实际相似性。
  2. 这里没有简单的答案。一切都取决于数据量和可用资源。 Too large或分区数量太少会降低性能。

    Some resources声称分区数应该是可用内核数的两倍左右。另一方面,单个分区通常不应包含超过 128MB,并且单​​个随机 block 不能大于 2GB(参见 SPARK-6235)。

    最后,您必须纠正潜在的数据偏差。如果某些键在您的数据集中出现过多,可能会导致资源使用不当和潜在故障。

  3. 没有,或者至少没有直接。您可以使用 keyBy 方法将 RDD 转换为所需的格式。此外,任何 Python 对象都可以被视为键值对,只要它实现了所需的方法,使其表现得像一个长度等于 2 的 Iterable。参见 How to determine if object is a valid key-value pair in PySpark

  4. 这取决于类型。只要 key 是 hashable* 就可以。通常这意味着它必须是不可变的结构,并且它包含的所有值也必须是不可变的。例如a list is not a valid key但是整数的元组是。

引用Python glossary :

An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__() method), and can be compared to other objects (it needs an __eq__() method). Hashable objects which compare equal must have the same hash value.

关于python - pyspark 使用 partitionby 对数据进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35973590/

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