分区ID相同,但是两次火花动作之间的分区位置发生了变化?

时间:2019-03-30 09:09:35

标签: apache-spark

我正在调试Spark应用程序:

val rdd1 = sparkContext.makeRDD(keyValueDataList1).partitionBy(new HashPartitioner(12))
rdd1.flatMapValues( value =>
    // print the key (it is a part of value) and spark partitionId
    // cache value in local memory
    ...
)...collect()

val rdd2 = sparkContext.makeRDD(keyValueDataList2).partitionBy(new HashPartitioner(12))
rdd2.flatMapValues( value =>
    // print the key (it is a part of value) and spark partitionId
    // wish use local cached value of keyValueDataList1, but failed
    ...
)...collect()

keyValueDataList2的键都存在于keyValueDataList1中,我真的发现同一个键的partitionId相同。但是,它在不同的主机上:

在rdd1中,我进入了主机192.168.31.19:

  • KEY = 1131,partitionID = 6

在rdd2中,我进入了主机192.168.31.20:

  • KEY = 1131,partitionID = 6

因此,在rdd2.flatMapValues中,我找不到缓存在不同主机上的KEY 1131的数据,而且似乎partitionId在主机之间又重新定位了。

我该如何解决问题?我不想使用分布式缓存或分布式文件系统。

0 个答案:

没有答案