我使用spark SQL(spark 2.1)来读取hive表。 hive表的模式如下(简化为与我的问题相关的唯一字段,另一个是无用的):
身体类型:Bynary
正文是一个有多个字段的JSON,我感兴趣的是一个数组。在这个数组的每个索引中,我有另一个包含日期的JSON。 我的目标是获取一个数据集,其中填充了我的数组的所有对象,其日期优于"插入所需日期"。
为此,我使用以下代码:
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-client运行它,每个执行器有16个内存。驱动程序有4个内存。每个执行者都有1个核心。
我使用了hdfs dfs -du hiveTableLocationPath,结果我喜欢45 Go。
我可以做些什么来调整我的工作?