2017-10-31 10 views
0

Ich versuche eine der Strahl Google Dataflow-Pipeline-Beispiele, aber ich stoße auf eine Ausnahme in Bezug auf MapElements und Methoden SingleFunction/SerializableFunction Anrufe. Das Code-Snippet ist die folgende:Apache Beam Dataflow SDK Fehler mit Beispiel

static class ParseTableRowJson extends SimpleFunction<String, TableRow> { 
    @Override 
    public TableRow apply(String input) { 
     try { 
      return Transport.getJsonFactory().fromString(input, TableRow.class); 
     } catch (IOException e) { 
      throw new RuntimeException("Failed parsing table row json", e); 
     } 
    } 
} 
...... 
p.apply(TextIO.read().from(options.getInput())) 
       .apply(MapElements.via(new ParseTableRowJson())) 
       .apply(new ComputeTopSessions(samplingThreshold)) 
       .apply("Write", 
TextIO.write().withoutSharding().to(options.getOutput())); 

Die Ausnahme, dass seine ein mehrdeutiger Aufruf der Methoden:

Ambiguous method call. Both 
via (SimpleFunction<String, TableRow>) in MapElements and 
via (SerializableFunction)    in MapElements match 

Hat jemand anderes in die gleiche Ausnahme gestoßen und bekam einen Weg darum herum?

Das vollständige Beispiel ist in GitHub (https://github.com/apache/beam/blob/master/examples/java/src/main/java/org/apache/beam/examples/complete/TopWikipediaSessions.java).

Danke,

Fernando

Antwort

0

Dies scheint bei HEAD wurden im Code festgelegt. Insbesondere hat MapElements nicht mehr zwei statische Versionen von via. Kurzfristig können Sie entweder Beam from HEAD installieren oder das Beispiel aktualisieren, um ParDo direkt zu verwenden, indem Sie die ParseTableRowJson a DoFn anstelle von SimpleFunction verwenden.

+0

Hallo Ben, danke für die Antwort, ich habe am Ende die MapElements zu einem DoFn umgewandelt, wie du gesagt hast und es hat gut funktioniert. –

Verwandte Themen