1
나는 (다음에 평균을 계산하기 위해) 날짜별로 값을 계산하고 합계하는 함수를 작성하려고합니다. 나는 이것을 멀리 가지고있다 :지도 및 튜플 값 (일일 평균)으로 Cassandra UDA 함수에서 튜플 값을 인스턴스화합니다.
CREATE OR REPLACE FUNCTION state_group_count_and_sum(state map<timestamp, frozen<tuple<bigint,double>>>, timestamp timestamp, value double)
CALLED ON NULL INPUT
RETURNS map<timestamp, frozen<tuple<bigint,double>>>
LANGUAGE java AS '
Date date = (Date) timestamp;
Calendar cal = Calendar.getInstance(); // locale-specific
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
date = cal.getTime();
TupleValue tupleValue = state.get(date);
Long count = (Long) tupleValue.getLong(0);
if (count == null) count = 1L;
else count = count + 1L;
Double sum = (Double) tupleValue.getDouble(1);
if (sum == null) sum = value;
else sum = sum + value;
//if (tupleValue == null) ?
tupleValue.setLong(0, count);
tupleValue.setDouble(1, sum);
state.put(date, tupleValue);
return state; ' ;
CREATE OR REPLACE AGGREGATE group_count_and_sum(timestamp, double)
SFUNC state_group_count_and_sum
STYPE map<timestamp, frozen<tuple<bigint,double>>>
INITCOND {};
tupleValue가 맵에 아직없는 새 날마다 null이기 때문에 실패한다. 어떻게하면 UDA에서 튜플 값을 인스턴스화 할 수 있습니까?