package com.facebook.hive.udf; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDF; import java.util.Arrays; @Description(name = "udfcumprod", value = "_FUNC_(VAL, KEYS...) - Computes a cumulative product on the VAL column. Resets whenever KEYS... changes.") public class UDFCumprod extends UDF { Object previous_keys[] = null; Double running_prod; public Double evaluate(Double val, Object... keys) { if (previous_keys == null || !Arrays.equals(previous_keys, keys)) { running_prod = 1.0; previous_keys = keys.clone(); } running_prod *= val; return running_prod; } }