java - 在某些字段上为键和窗口聚合添加盐时,Flink 抛出 NullPointerException
问题描述
我有一个程序进行两阶段聚合来解决我工作中的数据偏差。我使用了一个简单ThreadLocalRandom
的为我的原始文件生成后缀,例如:
private class KeyByTileWithSalt implements KeySelector<Type, String> {
@Override
public Long getKey(Type value) {
return value.toString() + ThreadLocalRandom.current().nextLong(1, 8);
}
}
但是当我在某个字段上进行窗口聚合的键添加盐时,Flink 会抛出 NullPointerException。
我在 flink-mail-list 上找到了一个类似的帖子unstable of hash value
,并得到了可能发生异常的原因,但我仍然无法在我的程序中找到关于. 有任何想法吗?
解决方案
Flink 依赖于keyBy
整个集群的确定性结果。这是必要的,以便集群中的每个节点都具有关于哪个节点负责处理每个密钥的一致视图。通过让密钥依赖于ThreadLocalRandom
你已经违反了这个假设。
您可以做的是向您在提取期间填充随机值的每条记录添加一个字段,然后使用该字段作为键。
推荐阅读
- python - Pygame 按钮对点击没有反应
- date - 将日历上的日期与另一个字段匹配
- firebase - 如何通过颤动的火力使firestore持久化到缓存文档
- html - 有没有办法使用 Node JS 创建动态选项表单?
- laravel - Laravel8 有许多之一
- itext7 - 在 Blazor WASM 中使用大表似乎不起作用
- javascript - 同步多个 div scrollTop 值时滚动速度变慢
- amazon-web-services - 如何使用 boto3 在 EMR Studio 中创建笔记本?
- xml - 如何读取 xml 格式的流数据(Pyspark)
- tfs - 如何在用户故事和测试用例之间创建可追溯性矩阵?