我正在开发一个工作流程,使用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函数也会抛出相同的错误。
为什么在本地运行与数据流不同的任何想法?或建议解决。
答案 0 :(得分:4)
找到一个解决方案,我需要在进行排序之前专门将v
转换为列表list(v)
。
说明运行本地与远程之间的区别。