所以,我试图在使用hiveContext的Spark中的hive表中读取。 该工作基本上将两个表中的数据读入两个数据帧,随后将这些数据帧转换为RDD' s。然后,我根据共同密钥加入他们。 但是,由于MetadataFetchFailException(What are the likely causes of org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle?),此连接失败。
我希望通过将数据传播到其他节点来避免这种情况。 目前,即使我有800个执行器,大多数数据被读入10个节点,每个节点都使用> 50%的记忆。
问题是,如何在读取操作期间将数据传播到更多分区?我不想稍后重新分配。
val tableDF= hiveContext.read.table("tableName")
.select("colId1", "colId2")
.rdd
.flatMap(sqlRow =>{
Array((colId1, colId2))
})