我使用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。
我能做些什么来调整我的工作?
1条答案
按热度按时间nx7onnlm1#
我建议尝试这个udtf,它允许在hive中处理json列,这样就可以操作大型json并以分布式和优化的方式获取所需的数据。