2017-05-17 6 views
1

Flink (배치/스트리밍)에서 필드의 평균 및 합계를 동시에 계산할 수 있습니까? 집계 방법을 사용하면 groupBy 결과의 필드 합계를 계산할 수 있지만 평균을 동시에 계산하는 방법은 무엇입니까? 아래 예제 코드.Flink - 동시에 합계와 평균을 계산하는 방법은 무엇입니까?

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); 
DataSet<Tuple3<String,Integer,Double>> source = 
     env.readCsvFile(PathConfig.LINEITEM_1) 
     .fieldDelimiter("|") 
     types(String.class, Integer.class, Double.class); 

source.groupBy(0,1).aggregate(Aggregations.SUM, 2); 
//average of field 2??? 
+0

집계 대신 map/reduce를 사용할 수 있습니까? – ImbaBalboa

+0

reduceGroup을 사용하여 합계와 평균을 수동으로 계산할 수 있지만 이미 좋은 집계 합계 함수가 있으므로 평균을 자동으로 계산하는 방법이 있을지도 모른다고 생각했습니다. – Eli

답변

1
CSV 구문 분석, 그룹화 등의 간단한 작업을 위해

, 나는 FLINK의 Table API를 사용하는 것이 좋습니다 집계.

낮은 수준의 API를 사용하려는 경우 반복자가 더 이상 요소를 갖지 않을 때까지/counts를 더하고 끝에 최종 평균을 생성하는 GroupReduce 함수를 구현할 수 있습니다.

+0

스트리밍 테이블에 조인이없는 등 많은 제한이있는 것으로 보이는 표 API를 사용하는 것이 확실하지 않습니다. 단지 단순한 집계 함수 여야하기 때문에 평균을 계산할 수있는 방법이 있는지 궁금합니다. 이전의 소스 코드에서 실제로는 평균 집계 함수가 있다는 것을 알았지 만 새 버전에서 주석 처리 된 이유는 무엇입니까? – Eli

+0

예, 제한이 있지만 이후 DataStream 및 표, 그것은 매우 유용한 도구입니다. 또한보십시오 : http://flink.apache.org/news/2017/03/29/table-sql-api-update.html 평균은 쉬운 것처럼 보입니다 그러나 2 개의 가동을 필요로합니다 (분열을위한 집합 단계 그리고 마지막지도) 반환 유형은 입력에 따라 다릅니다. 사용자가 필요한 것을 구현하도록하는 것이 더 좋습니다. – twalthr

관련 문제