我正在使用 Dataflow 处理具有大约 400 万个特征(总共约 2GB)的 Shapefile 并将几何加载到 BigQuery 中,因此在我的管道开始之前,我将 shapefile 特征提取到一个列表中,并使用beam.Create(features)
. 有两种方法可以创建初始功能列表:
- 将每个特征导出为 json 字符串,后续
DoFn
s 需要将其解析为 dict:
features = [f.ExportToJson() for f in layer]
- 导出从 JSON 字符串预解析的 python dict
features = [json.loads(f.ExportToJson()) for f in layer]
使用选项 1 时,beam.Create(features)
需要一分钟左右,管道继续。使用选项 2,beam.Create(features)
在 6 核 i7 上需要 3 多个小时,并且似乎在这里花费了很多时间:
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/apache_beam/typehints/trivial_inference.py", line 88, in <listcomp>
typehints.Union[[instance_to_type(v) for k, v in o.items()]],
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/apache_beam/typehints/trivial_inference.py", line 88, in instance_to_type
typehints.Union[[instance_to_type(v) for k, v in o.items()]],
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/apache_beam/typehints/trivial_inference.py", line 88, in <listcomp>
这是传递字典列表时trivial_inference
变慢的原因吗?beam.Create
我可以配置beam.Create
为不做它试图在那里做的任何事情,或者以其他方式加快它的速度,这样字典列表就不会比字符串列表慢 100 倍?