我正在使用Hive在项目上执行SQL查询。我使用ORC和50k Stride作为我的数据,并使用此配置创建了hive ORC表,并将某个日期列作为分区。
现在我想使用Spark SQL对运行在相同数据上的相同查询进行基准测试。
我执行了以下查询
val q1 = sqlContext.sql("select col1,col2,col3,sum(col4),sum(col5) from mytable where date_key=somedatkye group by col1,col2,col3")
在配置单元中,此查询需要90秒。但是对于相同的查询,火花需要21分钟,在查看工作时,我发现问题是因为Spark创建了2个阶段,而在第一阶段,它只有7个任务,每个任务对应7个数据块中的每一个在orc文件中给出分区。这些块大小不同,一个是5MB,另一个是45MB,因为这个落后者花费更多的时间导致花费太多时间来完成工作。
如何在spark中缓解此问题。如何手动增加分区数量,从而增加第1阶段中的任务数量,即使查询的给定范围只有7个物理块。