合并两个PCollection(Apache Beam)

时间:2019-09-08 05:12:50

标签: google-cloud-platform google-cloud-dataflow apache-beam google-cloud-pubsub

我在云存储中有两个文件。其中包含来自温度传感器的数据的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)

1 个答案:

答案 0 :(得分:1)

@jszule的注释通常是Dataflow / Beam的一个很好的答案:最好的支持联接是两个PCollection具有公共密钥时。对于大多数数据,Beam可以找出一个模式,您可以使用CoGroup.join转换。您必须做出的设计决定是如何选择键,例如四舍五入到最接近的1000。

您的用例很复杂:您需要按时间序列结转没有数据的键的值。解决方案是使用状态和计时器来生成“丢失”值。由于状态和计时器是按键和窗口显示的,因此您仍然需要仔细选择键。状态和计时器也以批处理模式工作,因此这是一个批处理/流式统一解决方案。

您可能想阅读有关该主题的this blog post by Reza Rokni and myselfthis talk by Reza at the Beam Summit Berlin 2019