python - 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
解决方案
不幸的是,这目前不受支持。文件头只能在管道构建时指定,因此目前最好的解决方案是尝试在管道构建时而不是执行时生成您需要的头。
也就是说,您可能能够以某种方式“欺骗”它以获得相同的结果。例如,您可以编写一个 CombineFn 将所有输入到 TextIO 的元素组合成一个包含 CSV 正文的字符串。然后将其发送到 ParDo,该 ParDo 将字典键作为侧面输入,并将它们作为标题附加到 CSV 正文的开头,最后将代表整个文件的字符串发送到 TextIO 转换。
重申一下,解决缺乏支持的问题有点作弊,而且它可能比原生支持的动态标头更脆弱且性能更低。如果您能够通过在管道构建时生成标头来避免该问题,那就更好了。
推荐阅读
- bixby - 如何在 Bixby 布局中指定图像 url
- firebase - 访问 Firebase 托管网站时出错,提示“您的计算机或网络可能正在发送自动查询”
- asp.net-mvc - MVC 路由 - 未知方法异常
- typescript - 打字稿:为什么这个微不足道的泛型函数不像它的非泛型等效函数?
- html - 必需和检查的输入标签在 Angular 组件中不起作用
- html - 难以实现 vue 分页
- javascript - 关于使用 Vanilla JS 的小屏幕上的滚动动画问题
- karate - 在空手道中转换日期格式
- php - 错误:SQLSTATE[08001]:[Microsoft][ODBC Driver 17 for SQL Server]客户端不支持加密
- asp.net-core - 如何将新列添加到 Identity RoleClaims 表中(asp net core)