繁体   English   中英

如何将历史JSON文件加载到日期分区的apache hive表中?

[英]How to load historical JSON files into date partitioned apache hive table?

这是我的要求,

  • 我有一堆没有日期标记的JSON文件。
  • 日期以文件名提供(例如:PLV_sample1_ 01-12-2018 .json)。
  • 我从不同的日期总共有40K JSON历史文件。

我可以知道如何通过从文件名中提取日期将这些数据加载到日期分区的配置单元表中?

在这里,您不能通过使用json reader API读取json文件来直接创建数据帧,因为您的表是基于日期和日期对象分区的,Json文件中不存在该对象。

但是你可以创建一个json文件名列表并迭代它以从json文件中提取日期。

我希望你的所有json文件名称结构都一样。 考虑到上面创建一个对象,其中包含所有文件名,如下所示

val obj = List(“PLV_sample1_01-12-2018.json”,“PLV_sample1_02-12-2018.json”,“PLV_sample1_03-12-2018.json”,“PLV_sample1_04-12-2018.json”,“PLV_sample1_05-12- 2018.json“)

val date = obj.map(x => x.split(“_”)。last.substring(0,10))。foreach(println)//所有日期都会出现在这个对象中

注意:我可以看到你有大约40k的文件,所以如果收集很大,那么最好调用“toIndexedSeq”然后性能会更好O(1)val date = obj.toIndexedSeq.map(x => x.split(“ _“)。last.substring(0,10))。的foreach(的println)

现在您拥有所有日期值

首先创建一个sparkSession,然后创建val df = spark.read.json(“路径到json文件”)

并且使用withColumn方法,您可以在DF中添加日期作为列,同时写入接收器

df.write.format(“storage format”)。partitionBy(“date”)。save(“sink to sink”)

注意:如果Hive是你的接收器而table是外部的,那么给hive外部表路径。 或者您可以使用saveAsTable(“表名”)。 这里spark将创建hive表并加载数据,日期为分区列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM