hive saveastable为每次运行创建一个新的Parquet表文件

8tntrjer  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(423)

我使用下面的scala代码将数据从json文件写入hive中的表。import org.apache.spark.sparkconf导入org.apache.spark.sql.sqlcontext

val conf = new SparkConf().setAppName("App").setMaster("local")

import org.apache.spark.sql.hive._

val hiveContext = new HiveContext(sc)
val stg_comments = hiveContext.read.schema(buildSchema()).json(<path to json file)

comment.write.mode("append").saveAsTable(<table name>)

我的json数据的字段值中有换行符和回车符,因此,我不能简单地在配置单元中插入记录(因为配置单元表默认情况下不在数据值中存储换行符和回车符),因此,我需要使用saveastable选项。这里的问题是,每次读取json文件并向现有表追加新记录时,都会在hivewarehouse目录的表目录中创建一个新的parquet文件。这会在目录中产生非常小的Parquet文件。我想把数据附加到现有的Parquet文件。我们知道怎么做吗?谢谢!

lyr7nygr

lyr7nygr1#

这是预期的行为。这里没有“附加到现有文件”选项。每个作业都有自己的任务集,每个任务都有自己的输出文件。 repartitioning 重写前可以减少写入的文件数量,但不能阻止创建新文件。
如果文件数量出现问题,则必须运行单独的作业来读取现有的小文件并合并到较大的块中。

相关问题