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

如何在Spark中使用重新分区()指定文件大小

淳于开畅
2023-03-14

我使用pyspark,我有一个大型数据源,我想重新分区,明确指定每个分区的文件大小。

我知道使用< code>repartition(500)函数会将我的拼花分解成500个大小几乎相同的文件。问题是每天都有新数据添加到这个数据源中。有些日子可能会有大量的投入,有些日子可能会有少量的投入。因此,当查看一段时间内的分区文件大小分布时,每个文件的大小在< code>200KB到< code>700KB之间变化。

我在考虑指定每个分区的最大大小,这样不管文件数量多少,每天每个文件的大小都差不多。这将有助于我以后在这个大型数据集上运行我的作业,以避免扭曲的执行器时间和混乱时间等。

有没有办法使用< code>repartition()函数或者在将数据帧写入parquet时指定它?

共有1个答案

徐俊楚
2023-03-14

您可以考虑使用参数maxRecordsPerFile编写结果。

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

  • 我使用火花处理大文件,我有12个分区。我有rdd1和rdd2,我在它们之间建立了连接,而不是选择(rdd3)。我的问题是,我咨询了最后一个分区比其他分区太大,从分区1到分区11但分区12。所以我划分了。我将我的rdd3重新分区为,但我最后一个分区仍然太大。我如何平衡分区的大小? 我的i编写自己的自定义分区程序?

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

  • 我有数千个压缩文件,每个压缩文件的大小为 2GB,位于 HDFS 中。我正在使用火花来处理这些文件。我正在使用Spark textFile()方法从HDFS加载文件。我的问题是如何重新分区数据,以便我可以并行处理每个文件。目前,每个.gz文件都在单个任务中处理。因此,如果我处理 1000 个文件,则只执行 1000 个任务。我知道,压缩文件是不可拆分的。但是,我可以使用其他方法来更快地运行我的作业

  • 具有以下日志输出: 我想知道有什么方法可以增加SQL输出的分区大小。

  • 本文向大家介绍在Python中打开文件时如何指定缓冲区大小?,包括了在Python中打开文件时如何指定缓冲区大小?的使用技巧和注意事项,需要的朋友参考一下 如果看一下open-open(name [,mode [,buffering]])的函数定义,您会发现在Python 2中它需要3个参数,第三个是缓冲。可选的buffering参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正