Apache spark SPARK SQL自连接从HDFS块读取两次

Apache spark SPARK SQL自连接从HDFS块读取两次,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,下面是我正在使用Spark 1.3.1执行的相当复杂的查询的示例片段。在这个版本中,窗口函数不是选项。这个查询从HDF中读取大约18K块两次,然后用18K分区进行洗牌 由于这是一个自联接,而且两个表都是按相同的键分组和联接的,所以我假设所有键都将位于联接的同一分区上,这可能会避免混乱 有没有办法避免读两遍,也避免乱读?我可以在默认分区器中重新分区输入集,还是在数据帧上单独使用组,而不是作为单个查询执行?谢谢 val df=hiveContext.sqlSELECT EVNT.COL1 ,EVNT

下面是我正在使用Spark 1.3.1执行的相当复杂的查询的示例片段。在这个版本中,窗口函数不是选项。这个查询从HDF中读取大约18K块两次,然后用18K分区进行洗牌

由于这是一个自联接,而且两个表都是按相同的键分组和联接的,所以我假设所有键都将位于联接的同一分区上,这可能会避免混乱

有没有办法避免读两遍,也避免乱读?我可以在默认分区器中重新分区输入集,还是在数据帧上单独使用组,而不是作为单个查询执行?谢谢

val df=hiveContext.sqlSELECT EVNT.COL1 ,EVNT.COL2 ,EVNT.COL3 ,当EVNT.COL4=EVNT\u DRV.min\u COL4,然后是EVNT.COL5时的最大情况 ELSE-2147483648结束为COL5 从…起 TRANS_EVNT EVNT 内部联接选择 可乐 ,COL2 ,COL3 ,COL6 ,MINCOL4作为minu COL4 从…起 TRANS_EVNT 其中,“2015-01-01”和“2015-01-31”之间的分区_键 分组 可乐 ,COL2 ,COL3 ,COL6 EVNT_DRV 在…上 EVNT.COL1=EVNT\U DRV.COL1 和EVNT.COL2=EVNT_DRV.COL2 和EVNT.COL3=EVNT_DRV.COL3 和EVNT.COL6=EVNT_DRV.COL6 其中,“2015-01-01”和“2015-01-31”之间的分区_键 分组 EVNT.COL1 ,EVNT.COL2 ,EVNT.COL3 ,EVNT.COL6
谢谢@zero323。我尝试用过滤后的结果集缓存数据帧,但没有任何不同。然后我尝试将DF重新分区到1000个分区,这将跳过第二次读取。我正在使用下面的。val TRANS_EVNT_RAW=hiveContext.sqlSELECT*来自TRANS_EVNT,其中分区键>='2015-01-01'和分区键<'2015-01-31'val TRANS_EVNT_repart=TRANS_EVNT_RAW.repartition 1000 TRANS_EVNT_repart.registerTempTableTRANS_EVNT作业执行过程中有以下阶段1。在DataFrame->tasks 18100处重新分区;2.数据帧->任务1000处的mapPartition;3.数据帧->任务1000处的mapPartition;4.数据帧->任务500处的映射分区;5.数据帧->任务500处的映射分区;我已经将spark.sql.shuffle.partitions设置为500;我相信这可以进一步优化,但不知道如何优化。如果您有任何建议,我们将不胜感激。@zhang zhan,请您看看上面的问题好吗?谢谢@zero323。我尝试用过滤后的结果集缓存数据帧,但没有任何不同。然后我尝试将DF重新分区到1000个分区,这将跳过第二次读取。我正在使用下面的。val TRANS_EVNT_RAW=hiveContext.sqlSELECT*来自TRANS_EVNT,其中分区键>='2015-01-01'和分区键<'2015-01-31'val TRANS_EVNT_repart=TRANS_EVNT_RAW.repartition 1000 TRANS_EVNT_repart.registerTempTableTRANS_EVNT作业执行过程中有以下阶段1。在DataFrame->tasks 18100处重新分区;2.数据帧->任务1000处的mapPartition;3.数据帧->任务1000处的mapPartition;4.数据帧->任务500处的映射分区;5.数据帧->任务500处的映射分区;我已经将spark.sql.shuffle.partitions设置为500;我相信这可以进一步优化,但不知道如何优化。如果您有任何建议,我们将不胜感激。@zhang zhan,请您看看上面的问题好吗?