首页 > 解决方案 > PCollection 到数组 - 如何将标题动态输入到 WriteToText PTransform?

问题描述

我正在使用主要在 Dataflow 运行器上运行的 Apache Beam 2.19 编写数据流作业。我正在尝试将具有嵌套和重复字段的 BigQuery 输入转换为扁平 CSV。BQ 输入使用递归方法展平。我需要将扁平格式写入 CSV 文件,这不是问题,除非我需要将字典键作为标题传递。我可以将标头转换为 pvalue singelton,但我无法将其作为输入传递给标头参数(接受数组)。 https://beam.apache.org/releases/pydoc/2.19.0/apache_beam.io.textio.html#apache_beam.io.textio.WriteToText

标签: pythongoogle-cloud-dataflowapache-beam

解决方案


不幸的是,这目前不受支持。文件头只能在管道构建时指定,因此目前最好的解决方案是尝试在管道构建时而不是执行时生成您需要的头。

也就是说,您可能能够以某种方式“欺骗”它以获得相同的结果。例如,您可以编写一个 CombineFn 将所有输入到 TextIO 的元素组合成一个包含 CSV 正文的字符串。然后将其发送到 ParDo,该 ParDo 将字典键作为侧面输入,并将它们作为标题附加到 CSV 正文的开头,最后将代表整个文件的字符串发送到 TextIO 转换。

重申一下,解决缺乏支持的问题有点作弊,而且它可能比原生支持的动态标头更脆弱且性能更低。如果您能够通过在管道构建时生成标头来避免该问题,那就更好了。


推荐阅读