Hive 如何用中值插补缺失值

Hive 如何用中值插补缺失值,hive,apache-pig,bigdata,median,missing-data,Hive,Apache Pig,Bigdata,Median,Missing Data,我需要使用ApachePig用中值填充缺失值 有没有一种有效的方法 对于R,我记得使用了以下步骤: a <- c(1, 2, NA, 3) a[is.na(a)] <- median(a, na.rm = TRUE) a我不喜欢给出“阅读说明”的答案,但您确实需要知道Pig如何处理空值,因为它与R完全不同 这是关于空值的清管器手册页面: 也就是说,您可以使用LinkedIn的DataFu库对排序后的行李执行中值计算 REGISTER datafu-1.2.0.jar DEFINE

我需要使用ApachePig用中值填充缺失值

有没有一种有效的方法

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

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

a我不喜欢给出“阅读说明”的答案,但您确实需要知道Pig如何处理空值,因为它与R完全不同

这是关于空值的清管器手册页面:

也就是说,您可以使用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:medianval)。

我创建了一个UDF来执行此操作。结果很好。

您的数据结构如何?要使用列的中间值还是行的中间值?