gpt4 book ai didi

hadoop - 如何在 pig latin 的日期时间范围内创建丢失的记录

转载 作者:可可西里 更新时间:2023-11-01 15:17:23 25 4
gpt4 key购买 nike

我有表单的输入记录

2013-07-09T19:17Z,f1,f2
2013-07-09T03:17Z,f1,f2
2013-07-09T21:17Z,f1,f2
2013-07-09T16:17Z,f1,f2
2013-07-09T16:14Z,f1,f2
2013-07-09T16:16Z,f1,f2
2013-07-09T01:17Z,f1,f2
2013-07-09T16:18Z,f1,f2

这些代表时间戳和事件。我手写了这些,但实际数据应该根据时间排序。

我想生成一组记录,这些记录将输入到需要连续时间序列的绘图函数中。我想填写缺失值,即如果有“2013-07-09T19:17Z”和“2013-07-09T19:19Z”的条目,我想为“2013-07-09T19:18Z”生成条目"具有预定义的值。

我的想法:

  1. 使用 MIN 和 MAX 查找系列中的开始和结束日期
  2. 编写接受最小值和最大值并返回与缺失值的关系的 UDF时间戳
  3. 加入以上2个关系

虽然我不知道如何在 PIG 中实现它。非常感谢任何帮助。

谢谢!

最佳答案

使用脚本(在 pig 之外)生成另一个文件,所有时间戳都在 MIN 和 MAX 之间,包括 MIN 和 MAX。将其加载为第二个数据集。这是我从您的数据集中使用的示例。请注意,我只填补了一些空白,而不是全部。

2013-07-09T01:17Z,d1,d2
2013-07-09T01:18Z,d1,d2
2013-07-09T03:17Z,d1,d2
2013-07-09T16:14Z,d1,d2
2013-07-09T16:15Z,d1,d2
2013-07-09T16:16Z,d1,d2
2013-07-09T16:17Z,d1,d2
2013-07-09T16:18Z,d1,d2
2013-07-09T19:17Z,d1,d2
2013-07-09T21:17Z,d1,d2

对上面的原始数据集和生成的数据集做一个COGROUP。使用嵌套的 FOREACH GENERATE 写入输出数据集。如果第一个数据集为空,则使用第二组中的值生成输出数据集,否则使用第一个数据集。这是我在这两个数据集上使用的一段代码。

Org_Set = LOAD 'pigMissingData/timeSeries' USING PigStorage(',') AS (timeStamp, fl1, fl2);
Default_set = LOAD 'pigMissingData/timeSeriesFull' USING PigStorage(',') AS (timeStamp, fl1, fl2);
coGrouped = COGROUP Org_Set BY timeStamp, Default_set BY timeStamp;

Filled_Data_set = FOREACH coGrouped {
x = COUNT(times);
y = (x == 0? (Default_set.fl1, Default_set.fl2): (Org_Set.fl1, Org_Set.fl2));
GENERATE FLATTEN(group), FLATTEN(y.$0), FLATTEN(y.$1);
};

如果您需要进一步的说明或帮助,请告诉我

关于hadoop - 如何在 pig latin 的日期时间范围内创建丢失的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com