我在云存储中有两个文件。其中包含来自温度传感器的数据的Avro格式的File1。
EditText
包含Avro格式的File2,该文件具有来自风传感器的数据。
time_stamp | Temperature
1000 | T1
2000 | T2
3000 | T3
4000 | T3
5000 | T4
6000 | T5
我想像下面那样合并输出
time_stamp | wind_speed
500 | w1
1200 | w2
1500 | w3
2200 | w4
2500 | w5
3000 | w6
我正在寻找结合上述文件的Apache Beam解决方案。现在它正在从文件读取,但将来可能通过pubsub来。我想找出结合两个PCollection并创建另一个PCollection tempDataWithWindSpeed的自定义方式。
time_stamp |Temperature|wind_speed
1000 |T1 |w1 (last earliest reading from wind sensor at 500)
2000 |T2 |w3 (last earliest reading from wind sensor at 1500)
3000 |T3 |w6 (wind sensor reading at 3000)
4000 |T3 |w6 (last earliest reading from wind sensor at 3000)
5000 |T4 |w6 (last earliest reading from wind sensor at 3000)
6000 |T5 |w6(last earliest reading from wind sensor at 3000)
答案 0 :(得分:1)
@jszule的注释通常是Dataflow / Beam的一个很好的答案:最好的支持联接是两个PCollection具有公共密钥时。对于大多数数据,Beam可以找出一个模式,您可以使用CoGroup.join
转换。您必须做出的设计决定是如何选择键,例如四舍五入到最接近的1000。
您的用例很复杂:您需要按时间序列结转没有数据的键的值。解决方案是使用状态和计时器来生成“丢失”值。由于状态和计时器是按键和窗口显示的,因此您仍然需要仔细选择键。状态和计时器也以批处理模式工作,因此这是一个批处理/流式统一解决方案。
您可能想阅读有关该主题的this blog post by Reza Rokni and myself或this talk by Reza at the Beam Summit Berlin 2019