Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CombineFn累积来自所有节点的数据后,组合每个键的所有值_Java_Google Cloud Dataflow - Fatal编程技术网

Java 使用CombineFn累积来自所有节点的数据后,组合每个键的所有值

Java 使用CombineFn累积来自所有节点的数据后,组合每个键的所有值,java,google-cloud-dataflow,Java,Google Cloud Dataflow,我想在perKey的基础上迭代KV pCollection的值。我使用下面的代码使用自定义类进行组合 PCollection<KV<String, String>> combinesAttributes = valExtract.get(extAttUsers).apply(Combine.<String, String>perKey( new CombineAttributes()));

我想在perKey的基础上迭代KV pCollection的值。我使用下面的代码使用自定义类进行组合

PCollection<KV<String, String>> combinesAttributes =
              valExtract.get(extAttUsers).apply(Combine.<String, String>perKey(
                      new CombineAttributes()));
PCollection组合属性=
获取(extAttUsers).apply(Combine.perKey(
新组合属性());
下面是我的自定义联合收割机类

public static class CombineAttributes implements SerializableFunction<Iterable<String>, String> {
   @Override
   public String apply(Iterable<String> input) {...}..}
公共静态类CombineAttributes实现SerializableFunction{
@凌驾
公共字符串应用(Iterable输入){…}..}
这对于小输入来说效果很好,但对于大输入来说,联合收割机并没有达到预期效果。输出仅为一个键组合了几个值,其他值丢失。我假设输出只合并了来自一个节点的数据

中的文档提到要使用CombineFn来组合所有节点中每个键的完整值集合

但是,当我更改如下自定义联合收割机功能时,我得到以下错误:

incompatible types: CombineAttributes cannot be converted to com.google.cloud.dataflow.sdk.transforms.SerializableFunction<java.lang.Iterable<java.lang.String>,java.lang.String>
不兼容类型:CombineAttributes无法转换为com.google.cloud.dataflow.sdk.transforms.SerializableFunction
组合功能

public static class CombineAttributes extends CombineFn<Iterable<String>, CombineAttributes.Accum, String> {

public static class Accum {
  List<String> inputList = new ArrayList<String>();
}
public Accum createAccumulator() { return new Accum(); }
public Accum addInput(Accum accum, Iterable<String> input) {
  for (String item : input) {
    accum.inputList.add(item);
  }
  return accum;
}
public Accum mergeAccumulators(Iterable<Accum> accums) {
   Accum merged = createAccumulator();
   for (Accum accum : accums) {
     for (String item : accum.inputList) {
       merged.inputList.add(item);
     }
   }
   return merged;
 }
 public String extractOutput(Accum accum) {
   return "";
 }
}
公共静态类CombineAttributes扩展CombineAfn{
公共静态类累加器{
List inputList=新建ArrayList();
}
公共Accum CreateCummerator(){返回新Accum();}
公共累加输入(累加、可输入){
for(字符串项:输入){
累计输入清单新增(项);
}
返回累计;
}
公共累加器(可累加){
Accum merged=createAccumulator();
用于(累计:累计){
for(字符串项:累计输入列表){
合并.输入列表.添加(项);
}
}
返回合并;
}
公共字符串提取输出(Accum Accum){
返回“”;
}
}

combine perKey extending
CombineFn
没有可用的示例代码。请告诉我上面的代码有什么问题。

如果您只想迭代所有值,您可以使用
GroupByKey
PCollection
转换为
PCollection如果您只想迭代所有值,您可以使用
GroupByKey
PCollection
转换为
PCollection