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

如何在Spark中重新分区为每列固定数量的分区?

刘德义
2023-03-14

我需要从一个Hive表中读取数据并将其插入到另一个Hive表中。两个表的架构是相同的。该表按日期分区

步骤1:从Spark的源表中读取数据。

第 2 步:按列(国家、日期)和分区数重新分区为 4。

df.repartition(4, col("country_code"), col("record_date"))

我只得到每个国家代码1个分区

共有1个答案

程赞
2023-03-14

无论您在步骤2中做什么,都会将数据重新分区到内存中的4个分区,但如果您执行df.write,则不会保存4个文件。

为此,您可以使用以下代码:

df.repartition(4, col("country_code"),col("record_date"))
.write
.partitionBy(col("country_code"),col("record_date"))
.mode(SaveMode.Append).saveAsTable("TableName")
 类似资料:
  • 在Apache Spark中, -允许将RDD精确划分为分区。 而是如何将给定的RDD划分成分区,使得所有分区(最后一个分区除外)都具有指定数量的元素。鉴于RDD元素的数量是未知的,做<代码>。count()的开销很大。 预期:

  • 根据Spark 1.6.3的文档,应该保留结果数据表中的分区数: 返回由给定分区表达式分区的新DataFrame,保留现有的分区数 Edit:这个问题并不涉及在Apache Spark中删除空DataFrame分区的问题(例如,如何在不产生空分区的情况下沿列重新分区),而是为什么文档所说的内容与我在示例中观察到的内容不同

  • 我的假设是,首先,spark会从cassandra读取数据,因此在这个阶段,cassandra的大分区不会因为重新分区而分裂。重新分区将对从Cassandra加载的基础数据起作用。 我只是想知道答案,当从spark读取数据时,重新分区是否会改变数据分布,而不是再次进行分区?

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

  • 我是Spark的新手,有一个1 TB的文件需要处理。 我的系统规格是: 每个节点:64 GB RAM 节点数:2 每个节点的核心:5 正如我所知,我必须重新分区数据以获得更好的并行性,因为火花将尝试仅通过(核心总数*2或3或4)创建默认分区。但在我的情况下,由于数据文件非常大,我必须将这些数据重新分区为一个数字,以便这些数据可以以有效的方式处理。 如何选择要在重新分区中传递的分区数??我应该如何计

  • 我试图在对数据的某一列执行聚合操作之前对数据进行预分区。我有3个工作节点,我希望每个分区在我分区的列中都有不重叠的值。我不希望出现两个分区在列中可能具有相同值的情况。 例如。如果我有以下数据 那么以下隔墙是令人满意的: 分区1 分区2 分区3 不幸的是,我下面的代码不起作用。 我已经看过了 如何定义数据帧的分区 我还是想不通。