Apache spark Spark在读取时强制执行分区
我有一个数据集,其分区如下:Apache spark Spark在读取时强制执行分区,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个数据集,其分区如下: raw_data/year=2020/month=05/day=01/hour=00/minute=00/xxx.parquet raw_data/year=2020/month=05/day=01/hour=00/minute=01/xxx.parquet ... ... raw_data/year=2020/month=05/day=01/hour=01/minute=00/xxx.parquet ... 我想加载大量分区(比如1个月),每小时聚合一次,然后用
raw_data/year=2020/month=05/day=01/hour=00/minute=00/xxx.parquet
raw_data/year=2020/month=05/day=01/hour=00/minute=01/xxx.parquet
...
...
raw_data/year=2020/month=05/day=01/hour=01/minute=00/xxx.parquet
...
我想加载大量分区(比如1个月),每小时聚合一次,然后用以下分区保存:
processed_data/year=2020/month=05/day=01/hour=00/yyy.parquet
processed_data/year=2020/month=05/day=01/hour=01/yyy.parquet
...
我觉得,如果Spark可以读取数据集,这样每个执行器都可以读取
hour
分区下的所有文件,那么就可以最大限度地减少改组。有没有办法指定Spark的分区读取模式?我认为最好以您想要的方式保存数据,而不是试图自定义Spark加载数据的方式
您可以读取所有数据并按小时对其进行分区。您可能需要首先创建一个列,如“年-月-日-小时”,然后可以基于此列重新划分数据
df.repartition(col(“年-月-日-小时”).write.format(“拼花”).save(文件路径)
我认为最好以您想要的方式保存数据,而不是试图自定义Spark加载数据的方式
您可以读取所有数据并按小时对其进行分区。您可能需要首先创建一个列,如“年-月-日-小时”,然后可以基于此列重新划分数据
df.repartition(col(“年-月-日-小时”).write.format(“拼花”).save(文件路径)
最佳方法如下:
df.repartition…write.partitionBy…
以避免乱序和更好的后续读取性能
Spark partition discovery
on read with base path也会有所帮助。最佳方法如下:
df.repartition…write.partitionBy…
以避免乱序和更好的后续读取性能
Spark partition discovery
on read with base path也会有所帮助。repartitionBy是一个更安全的选项,从保存开始,你是说它如何保存在他的湖的原始区域?你认为需要两者吗从保存开始,它是一个更安全的选项,你是说它如何保存在他的湖的原始区域?你认为两者都需要吗