如何用中值来估算缺失值

时间:2014-05-07 05:51:04

标签: hive apache-pig bigdata median missing-data

我需要使用Apache Pig将中值修改为缺失值。

有没有一种有效的方法呢?

对于R,我记得使用以下步骤:

a <- c(1, 2, NA, 3)
a[is.na(a)] <- median(a, na.rm = TRUE)

但我需要使用Apache Pig的有效解决方案。

2 个答案:

答案 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来执行此操作。结果很好。