当前位置: 首页 > 知识库问答 >
问题:

将RDD划分为每个分区中元素数量固定的分区

冯宏浚
2023-03-14

在Apache Spark中,

repartition(n)-允许将RDD精确划分为n分区。

而是如何将给定的RDD划分成分区,使得所有分区(最后一个分区除外)都具有指定数量的元素。鉴于RDD元素的数量是未知的,做<代码>。count()的开销很大。

C = sc.parallelize([x for x in range(10)],2)
Let's say internally,  C = [[0,1,2,3,4,5], [6,7,8,9]]  
C = someCode(3)

预期:

C = [[0,1,2], [3,4,5], [6, 7, 8], [9]]

共有1个答案

狄阳秋
2023-03-14

在pyspark中相当容易:

    C = sc.parallelize([x for x in range(10)],2)
    rdd = C.map(lambda x : (x, x))
    C_repartitioned = rdd.partitionBy(4,lambda x: int( x *4/11)).map(lambda x: x[0]).glom().collect()
    C_repartitioned

    [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]

这称为自定义分区。更多信息:http://sparkdatasourceapi.blogspot.ru/2016/10/patitioning-in-spark-writing-custom.html

http://baahu.in/spark-custom-partitioner-java-example/

 类似资料:
  • 我需要从一个Hive表中读取数据并将其插入到另一个Hive表中。两个表的架构是相同的。该表按日期分区 步骤1:从Spark的源表中读取数据。 第 2 步:按列(国家、日期)和分区数重新分区为 4。 我只得到每个国家代码1个分区

  • 我想将n个元素的数组划分为给定大小的子数组,并使用所有可能的元素组合。 例如: 等等。正如您所看到的,子数组中元素的顺序或子数组中子数组的顺序并不重要。它必须是输入数组子数组的最小数目。 我有下面的解决方案,但它也包括排列。我需要优化这一点,不产生任何排列在所有。JavaScript不是necesarry,任何语言都可以。提前感谢您的帮助。

  • 问题内容: 我对Apache Spark和Python比较陌生,想知道像我将要描述的东西是否可行? 我有一个格式为[m 1,m 2,m 3,m 4,m 5,m 6, … m n ]的RDD(运行rdd.collect()时会得到这个)。我想知道是否有可能将此RDD转换为[[m 1,m 2,m 3),(m 4,m 5,m 6).....(m n-2, m n-1,m n)]。内部元组的大小应为k。如

  • 最早和最简单的技术之一是用于将多个进程加载到主内存中的是固定分区或连续内存分配。 在这种技术中,主存储器被分成相等或不同大小的分区。 操作系统始终驻留在第一个分区中,而其他分区可用于存储用户进程。 内存以连续的方式分配给进程。 在固定分区中, 分区不能重叠。 进程必须在分区中连续存在才能执行。 有使用这种技术的各种缺点。 1. 内部碎片 如果进程的大小较小,那么分区的总大小会导致分区的某些大小被浪

  • 找到给定RDD的每个分区大小的最佳方法是什么。我正在尝试调试一个扭曲的分区问题,我尝试了以下方法: 它适用于小型RDD,但对于大型RDD,它会产生OOM错误。我的想法是,导致了这种情况的发生。但不管怎样,我只是想知道有没有更好的方法?

  • 我通过指定分区的数量从文本文件创建RDD(Spark 1.6)。但它给我的分区数与指定的分区数不同。 案例1 案例2 案例3 案例4 文件/home/pvikash/data/test的内容。txt是: 这是一个测试文件。将用于rdd分区 基于以上案例,我有几个问题。 对于案例2,显式指定的分区数为0,但实际分区数为1(即使默认最小分区为2),为什么实际分区数为1? 对于案例3,为什么在指定数量的