如何用中值填充缺失值

up9lanfz  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(400)

我需要用apachepig的中值来填充缺失的值。
有没有有效的方法?
对于r,我记得使用了以下步骤:

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

但是我需要一个使用apachepig的高效解决方案。

ffx8fchx

ffx8fchx1#

我创建了一个自定义项。结果很好。

jhiyze9q

jhiyze9q2#

我不想给出“阅读说明”的答案,但你真的需要知道pig是如何处理空值的,因为它与r有很大的不同。
这是关于nulls的pig手册页:pig手册nulls
也就是说,您可以使用linkedin的datafu库对已排序的订单包执行中值计算。

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生成(val不为null?val:中脉)。

相关问题