【发布时间】:2020-11-25 08:54:13
【问题描述】:
我有一个 Python 项目,它针对特定模式执行 JSON 验证。 它将作为 GCP Dataflow 中的转换步骤运行,因此在运行之前收集所有依赖项非常重要,以避免一次又一次地下载相同的文件。
架构放置在单独的 Git 存储库中。 Transformer 的本质是您在课堂上收到一条记录,然后您就可以使用它。典型的流程是加载 JSON 模式,根据它验证记录,然后对无效和有效的内容进行处理。以这种方式加载模式意味着我从存储库中下载每条记录的模式,它可能是数十万。 代码被“克隆”到工作人员中,然后独立工作。
受到 Python 在开始时(一次)加载需求并将它们用作导入的方式的启发,我想我可以将存储库(JSON 模式所在的位置)添加为 Python 需求,然后简单地在我的 Python 代码。但当然,它是一个 JSON,而不是要导入的 Python 模块。它是如何工作的?
一个例子是这样的:
- requirements.txt
git+git://github.com/path/to/json/schema@41b95ec
- dataflow_transformer.py
import apache_beam as beam
import the_downloaded_schema
from jsonschema import validate
class Verifier(beam.DoFn):
def process(self, record: dict):
validate(instance=record, schema=the_downloaded_schema)
# ... more stuff
yield record
class Transformer(beam.PTransform):
def expand(self, record):
return (
record
| "Verify Schema" >> beam.ParDo(Verifier())
)
【问题讨论】:
-
您是否考虑过使用侧输入?您可以将 JSON 模式作为辅助输入传递,并使用它在主输入中验证您的记录。 Here 是它的文档。对你有帮助吗?
-
@AlexandreMoraes 我去看看,听起来很有趣,谢谢!
标签: python json google-cloud-dataflow apache-beam jsonschema