【问题标题】:Is it against the Apache Beam Programming Model to Invoke an API?调用 API 是否违反 Apache Beam 编程模型?
【发布时间】:2017-07-26 05:20:06
【问题描述】:

在使用 Apache Beam 丰富数据时,对每个数据项进行 API 调用会不会出错

(我是 Apache Beam 新手)

【问题讨论】:

    标签: apache-beam


    【解决方案1】:

    不可以,但您可以批处理 API 调用以获得更好的性能。查看 this 博文中的“批处理 RPC”示例。

    另外需要注意的是,Beam 不能保证外部 API 调用只发生一次。如果有问题的管道需要完全一次性的 QoS,您应该努力使 API 调用具有幂等性。

    【讨论】:

    • 感谢您对 Batch RPC 的建议。
    • 这篇博文使用的类和batchElements()转换有什么区别?
    【解决方案2】:

    这取决于 API 调用的类型和数据的大小。如果数据指定了需要进行的 API 调用,这是合适的。但是,如果您有一些有限的数据集用于丰富您的输入元素,则可以使用部分 Beam 编程模型来减少所需的外部调用次数。

    例如,如果可以预加载生成 API 调用结果的数据,则可以通过读取所有数据并使用 View.asMap(或任何合适的视图)来使用侧面输入,将每次执行的 API 调用次数减少到某个相对恒定的次数。然后可以使用ParDo.withSideInputs 来使用侧面输入;参见programming guide,特别是关于ParDoSideInputs

    【讨论】:

    • 非常感谢托马斯的详细回复。请问根据 Apache Beam 编程模型进行这样的 API 调用是否是反模式?
    • 高度依赖你的数据和外部API;它的适用程度取决于访问模式、外部服务的可用性和其他上下文元素。在某些情况下它可能不合适,但我不会称之为反模式。
    • 谢谢托马斯!
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2010-10-05
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多