【发布时间】:2018-10-20 20:49:42
【问题描述】:
目前我有一个 ETL 作业,它读取几个表,执行某些转换并将它们写回日常表。
我在 spark sql 中使用以下查询 "INSERT INTO dbname.tablename PARTITION(year_month) 从 Spark_temp_table 中选择 *" 插入所有这些记录的目标表按年 X 月级别进行分区。每天生成的记录并不多,因此我在 X 年级别进行分区。
但是,当我检查分区时,我的代码运行的每一天都有大约 50MB 的小文件(代码必须每天运行),最终我的分区中将有大约 30 个文件,总计大约 1500MB
我想知道我是否有办法只在一个分区中创建一个(或根据块大小限制创建 2-3 个文件),而我每天都附加我的记录
我认为我可以做到的方法是从我的 spark 数据框中的相关分区中读取所有内容,将其附加最新记录并在回写之前对其进行重新分区。如何确保我只从相关分区读取数据,并且只有该分区被较少数量的文件覆盖?
【问题讨论】:
标签: apache-spark hadoop apache-spark-sql pyspark-sql