【问题标题】:PCollection to Array - How to dynamically input a header into a WriteToText PTransform?PCollection to Array - 如何将标头动态输入到 WriteToText PTransform?
【发布时间】:2020-05-22 08:09:37
【问题描述】:

我正在使用主要在 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

【问题讨论】:

  • 您能发布您目前制作的代码以及一些示例数据和/或表架构吗?

标签: python google-cloud-dataflow apache-beam


【解决方案1】:

很遗憾,目前不支持此功能。文件头只能在管道构建时指定,所以目前最好的解决方案是尝试在管道构建时而不是执行时生成你需要的头。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多