我尝试使用spark处理一些ID,并希望为每个批次进行重复处理
如果我的代码是
HashSet<String> uniqueID = new HashSet<>();
foreachPartition((VoidFunction<Iterator<T>>) idIterator -> {
...
//add unique id
if (!uniqueID.contains(id)){
uniqueID.add(id)
}
});
在这种情况下,由于foreachpartition在工作程序节点上执行,但是我在foreachpartition之外定义我的哈希集,它仍然可以工作吗?我知道按密钥还原将是最好的方法,并且我正在对其进行更改,但仅是分析现有的代码行为
答案 0 :(得分:0)
将哈希集移动到foreachPartition中,并根据您的评论,可以采用这种方法。但是,您将需要进行分区,以使Id值位于同一分区中,而不是跨分区。出现序列化错误时,确实会发生-只需进行检查即可确定。而且,您的方法不适合Soark并行处理方式。