Beam/Dataflow Python: AttributeError: '_UnwindowedValues' object has no attribute 'sort'
Beam/Dataflow Python: AttributeError: '_UnwindowedValues' object has no attribute 'sort'
我正在使用 Apache Beam 的 Python SDK 在 Google Cloud 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 上不同吗?或者建议变通。
找到了一个解决方案,我需要在进行排序之前专门将 v
转换为列表 list(v)
,这很有效。
奇怪 运行 本地与远程之间的区别。
我正在使用 Apache Beam 的 Python SDK 在 Google Cloud 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 上不同吗?或者建议变通。
找到了一个解决方案,我需要在进行排序之前专门将 v
转换为列表 list(v)
,这很有效。
奇怪 运行 本地与远程之间的区别。