没有关于如何将pCollections转换为输入到.CoGroupByKey()
所需的pCollections的文档上下文 基本上我有两个大的pCollections,我需要能够找到两者之间的差异,对于II型ETL更改(如果它不存在于pColl1中然后添加到pColl2中找到的嵌套字段),那么我就是能够从BigQuery保留这些记录的历史记录。
管道架构:
建议任何帮助。我在SO上发现了一个java链接,它完成了我需要完成的同样的事情(但是在Python SDK上没有任何内容)。
Convert from PCollection<TableRow> to PCollection<KV<K,V>>
是否有针对Apache Beam的文档/支持,尤其是Python SDK?
答案 0 :(得分:7)
为了让CoGroupByKey()
正常工作,您需要PCollections
tuples
,其中第一个元素是键,第二个 - < strong>数据。
在你的情况下,你说你有BigQuerySource
,它在当前版本的Apache Beam输出PCollection of dictionaries
(code)中,其中每个条目代表表格中的一行被读过。您需要将此PCollections映射到元组,如上所述。使用ParDo
:
class MapBigQueryRow(beam.DoFn):
def process(self, element, key_column):
key = element.get(key_column)
yield key, element
data1 = (p
| "Read #1 BigQuery table" >> beam.io.Read(beam.io.BigQuerySource(query="your query #1"))
| "Map #1 to KV" >> beam.ParDo(MapBigQueryRow(), key_column="KEY_COLUMN_IN_TABLE_1"))
data2 = (p
| "Read #2 BigQuery table" >> beam.io.Read(beam.io.BigQuerySource(query="your query #2"))
| "Map #2 to KV" >> beam.ParDo(MapBigQueryRow(), key_column="KEY_COLUMN_IN_TABLE_2"))
co_grouped = ({"data1": data1, "data2": data2} | beam.CoGroupByKey())
# do your processing with co_grouped here
BTW,可以找到用于Apache Beam的Python SDK文档here。