我需要使用Apache Pig将中值修改为缺失值。
有没有一种有效的方法呢?
对于R,我记得使用以下步骤:
a <- c(1, 2, NA, 3)
a[is.na(a)] <- median(a, na.rm = TRUE)
但我需要使用Apache Pig的有效解决方案。
答案 0 :(得分:0)
我不想给'阅读说明'答案,但你真的需要知道Pig如何处理Null值,因为它与R完全不同。
这是关于空值的Pig Manual页面:Pig Manual Nulls
话虽如此,您可以使用LinkedIn的DataFu库在 SORTED ORDER 包上执行中位数计算。
REGISTER datafu-1.2.0.jar
DEFINE MEDIAN datafu.pig.stats.Median();
--input data: 3,5,4,1,2
input = LOAD 'input' AS (val:int);
grouped = GROUP input ALL;
medians = FOREACH grouped {
sorted = ORDER input BY val;
GENERATE MEDIAN(sorted.val);
}
此时,您需要返回并使用新的中位数替换空值(在上述情况下为3)。
空替换的常用方法是:
data = FOREACH data GENERATE (val IS NOT NULL ? val : 0) as result;
不幸的是,这在你的情况下并不真正有效,因为你试图替换的价值对于每个包都是不同的。
您可以通过以下几种方式解决这个问题...最简单的方法是简单地将中位数添加到包的末尾,然后执行FOREACH GENERATE(val IS NOT NULL?val:medianval)。
答案 1 :(得分:0)
我创建了一个UDF来执行此操作。结果很好。