【发布时间】:2016-11-16 01:45:22
【问题描述】:
我们在使 asList() 方法可排序时遇到问题。
我们认为我们可以通过扩展 View 类并覆盖 asList 方法来做到这一点,但意识到 View 类有一个私有构造函数,所以我们不能这样做。
我们的另一个尝试是在 github 上分叉 Google Dataflow 代码并修改 PCollectionViews 类以使用 Collections.sort 方法返回一个排序列表,如下面的代码 sn-p 所示
@Override
protected List<T> fromElements(Iterable<WindowedValue<T>> contents) {
Iterable<T> itr = Iterables.transform(
contents,
new Function<WindowedValue<T>, T>() {
@SuppressWarnings("unchecked")
@Override
public T apply(WindowedValue<T> input){
return input.getValue();
}
});
LOG.info("#### About to start sorting the list !");
List<T> tempList = new ArrayList<T>();
for (T element : itr) {
tempList.add(element);
};
Collections.sort((List<? extends Comparable>) tempList);
LOG.info("##### List should now be sorted !");
return ImmutableList.copyOf(tempList);
}
请注意,我们现在正在对列表进行排序。
这似乎有效,当使用 DirectPipelineRunner 运行时,但当我们尝试使用 BlockingDataflowPipelineRunner 时,似乎没有执行代码更改。
注意:我们实际上重新编译了项目中使用的数据流,但这不起作用。
我们怎样才能做到这一点(作为来自asList 方法调用的排序列表)?
【问题讨论】: