5

我正在使用 Apache Beam 的 Python SDK 开发一个在 Google Cloud Dataflow 上运行的工作流程。

在本地运行时,工作流成功完成且没有错误,并且数据输出完全符合预期。

当我尝试在 Dataflow 服务上运行时,它会引发以下错误: AttributeError: '_UnwindowedValues' object has no attribute 'sort'

这来自以下代码:

class OrderByDate(beam.DoFn):
def process(self, context):
    (k, v) = context.element
    v.sort(key=operator.itemgetter('date'))
    return [(k, v)]

这被称为使用标准beam.ParDo,如下所示:

'order_by_dates' >> beam.ParDo(OrderByDate())

元组中的数据(k, v)如下例所示:

('SOME CODE', {'date':'2017-01-01', 'value':1, 'date':'2016-12-14', 'value':4}) 

作为v日期和值的对象

我尝试切换到标准 lambda 函数也会引发相同的错误。

任何想法为什么这在本地与在 Dataflow 上运行不同?或建议解决方法。

4

1 回答 1

10

找到了一个解决方案,我需要在进行排序之前专门转换v为一个列表,这很有效。list(v)

奇怪的是运行本地与远程之间的差异。

于 2017-01-27T12:33:18.053 回答