Spark-将分区数减少为读取的文件夹数

问题描述 投票:0回答:1

使用火花流传输(每5分钟),我将数据作为拼花形式存储在HDFS中。

/ data / yyyy-MM-dd / *。parquet

例如:/ data / 2020-02-02 / * parquet

每个镶木地板文件的大小仅以KB为单位

每个文件夹最多可包含288个实木复合地板文件。

我们通常读取过去24小时,过去7天,过去1个月等的数据。

使用spark读取数据时,我检查了分区号。假设我正在检查上个月的数据,每个文件夹中有288个文件,并且正在创建288个分区。

[当我尝试将数据重新分区为30时,它减少到只有180。

有没有办法为一个文件夹创建一个分区。

例如:当我读取最近30天的数据时。有什么办法可以读取30个分区的数据。如果7天7个分区。

apache-spark spark-streaming partition
1个回答
0
投票

我的首选解决方案是使用partitionBy函数:

import org.apache.spark.sql.functions._
val df = spark.range(1,100).withColumn("myPartition", col("id")%10)
// saving with one file per partition
df.repartition(1, $"myPartition")
  .write
  .mode("append")
  .partitionBy("myPartition")
  .parquet("output/data")

这应该创建

# hadoop fs -ls output/data
output/data/myPartition=0
output/data/myPartition=1
...
output/data/myPartition=9

每个有一个实木复合地板文件。

© www.soinside.com 2019 - 2024. All rights reserved.