【发布时间】:2019-04-10 01:42:55
【问题描述】:
目前我正在使用谷歌提供的 gcs-text-to-bigquery 模板并输入一个转换函数来转换我的 jsonl 文件。 jsonl 是非常嵌套的,我希望能够通过做一些转换来为换行分隔的 json 的每一行输出多行。
例如:
{'state': 'FL', 'metropolitan_counties':[{'name': 'miami dade', 'population':100000}, {'name': 'county2', 'population':100000}…], 'rural_counties':{'name': 'county1', 'population':100000}, {'name': 'county2', 'population':100000}….{}], 'total_state_pop':10000000,….}
显然会有比 2 个更多的县,每个州都会有其中一条线。我老板想要的输出是:
当我进行 gcs-to-bq 文本转换时,我最终每个州只得到一行(所以我将从 FL 获得 miami dade 县,然后无论第一个县在我的转换中为下一个州)。我读了一点,我认为这是因为模板中的映射需要每个 jsonline 一个输出。看来我可以做一个pardo(DoFn?)不确定那是什么,或者在python中有一个与beam.Map类似的选项。转换中有一些业务逻辑(现在大约有 25 行代码,因为 json 的列比我显示的要多,但这些非常简单)。
对此有什么建议吗?今晚/明天会有数据,BQ 表会有几十万行。
我正在使用的模板目前是在 java 中,但我可以很容易地将它翻译成 python,因为在 python 中有很多在线示例。我更了解python,并且我认为它更容易考虑到不同的类型(有时一个字段可以为空),并且鉴于我看到的示例看起来更简单,它似乎不那么令人生畏,但是,对任何一个都开放
【问题讨论】:
标签: java python google-bigquery google-cloud-dataflow apache-beam