Hive SaveAsTable为每次运行创建一个新的Parquet表文件

时间:2018-05-21 05:23:21

标签: scala apache-spark hive parquet

我有以下用于将数据从json文件写入Hive中的表的Scala代码。     import org.apache.spark.SparkConf     import 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数据在其字段值中有换行符和回车符,因此,我不能简单地在Hive中插入记录(因为Hive表默认情况下不会在数据值中存储换行符和回车符)因此,我需要使用 SaveAsTable 选项。这里的问题是,每次读取json文件并将新记录附加到现有表时,都会在Hive仓库目录的表目录中创建一个新的镶木地板文件。这导致目录中的小型镶木地板文件非常小。我想将数据附加到现有的镶木地板文件中。我们知道怎么做吗?谢谢!

1 个答案:

答案 0 :(得分:0)

这是预期的行为。此处没有附加到现有文件选项。每个作业都有自己的一组任务,每个任务都有自己的输出文件。重写前repartitioning可以减少写入的文件数量,但不能阻止创建新文件。

如果文件数量出现问题,您必须运行单独的作业来读取现有的小文件并合并为更大的块。