我使用下面的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文件。我们知道怎么做吗?谢谢!
1条答案
按热度按时间lyr7nygr1#
这是预期的行为。这里没有“附加到现有文件”选项。每个作业都有自己的任务集,每个任务都有自己的输出文件。
repartitioning
重写前可以减少写入的文件数量,但不能阻止创建新文件。如果文件数量出现问题,则必须运行单独的作业来读取现有的小文件并合并到较大的块中。