java—如何处理存储在一个非常大的未分区配置单元表的行中的json

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

我使用sparksql(spark2.1)来读取配置单元表。配置单元表的架构如下(简化为与我的问题相关的唯一字段,其他字段无效):
身体type:bynary
主体是一个包含多个字段的json,我感兴趣的是一个数组。在这个数组的每个索引中,我都有一个包含日期的json。我的目标是获得一个数据集,其中包含数组中日期优于“insertthewanteddate”的所有对象。
为此,我使用以下代码:

SparkConfig conf = //set the kryo serializer and tungsten at true

SparkSession ss = //set the conf on the spark session

Dataset<String> dataset = creatMyDatasetWithTheGoodType(SS.SQL("select * from mytable "));

Dataset<String> finalds = dataset.flatmap(json-> 
List<String> l = new ArrayList<>();
List<String> ldate =//i use Jackson to obtain the array of date, this action return a list
For(int i = O; i < ldate.size ; i++) { 
//if date is ok i add it to l
}

Return l.iterator()
});

(我的代码正在处理一个小数据集,我给它的目的是让它知道我在做什么)问题是这个配置单元表有大约2200万行。工作转了14个小时,没有完成(我杀死了它,但没有错误或gc开销)
我在用4个执行者的yarn客户端运行它,每个执行者有16个go内存。司机有4次的记忆。每个执行者一个核心。
我使用了一个hdfs-dfs-du hivetablelocationpath,结果得到了45个go。
我能做些什么来调整我的工作?

nx7onnlm

nx7onnlm1#

我建议尝试这个udtf,它允许在hive中处理json列,这样就可以操作大型json并以分布式和优化的方式获取所需的数据。

相关问题