PIG脚本如何

时间:2015-04-28 06:13:36

标签: hadoop mapreduce apache-pig bigdata

我正在尝试清理这名员工志愿者数据。没有办法跟踪员工是否已经注册志愿者,这样他就可以注册成为新的志愿者并获得新的VOLUNTEER_ID。我有一个数据输入到我可以将每个VOLUNTEER_ID绑定到其EMP_ID的位置。需要清理志愿者数据,以便我们弄清楚员工如何从志愿者级别转移到另一个人员以及何时。

业务逻辑是,当存在重叠日期时,我们会在start_date和end_date之间的时间范围内为员工提供最高级别。

我发布了一个输入数据样本以及输出应该是什么。

PIG脚本可以这样做吗?有人可以帮助我吗

INPUT:

EMP_ID  VOLUNTEER_ID    V_LEVEL STATUS  START_DATE  END_DATE
10001   100               1      A       1/1/2006   12/31/2007
10001   200               1      A       5/1/2006   
10001   100               1      A       1/1/2008   
10001   300               3      P       3/1/2008   3/1/2008
10001   300               3      A       3/2/2008   12/1/2008
10001   1001              2      A       5/1/2008   6/30/2008
10001   1001              3      A       7/1/2008   
10001   300               2      A       12/2/2008  

需要输出:(在输出中不需要VOLUNTEER_ID,但在下面添加以显示为输出选择了哪个ID,哪个没有)

EMP_ID  VOLUNTEER_ID    V_LEVEL STATUS  START_DATE  END_DATE
10001   100              1       A       1/1/2006   12/31/2007
10001   300              3       P       3/1/2008   3/1/2008
10001   300              3       A       3/2/2008   12/1/2008
10001   1001             2       A       5/1/2008   6/30/2008
10001   1001             3       A       7/1/2008   

1 个答案:

答案 0 :(得分:0)

您似乎希望数据中的行包含每个 PX.Objects.SO.SOOrderEntry graph = PXGraph.CreateInstance<PX.Objects.SO.SOOrderEntry>(); graph.Clear(PXClearOption.ClearAll); PX.Objects.SO.SOOrder order = new PX.Objects.SO.SOOrder(); graph.Document.Current = order; order.OrderType = "SO"; order = graph.Document.Insert(order); order.OrderDate = DateTime.Now; order.RequestDate = DateTime.Now; order.Status = "N"; order.CustomerID = cust.BAccountID; order.ProjectID = project.ID; graph.Document.Update(order); graph.Actions.PressSave(); V_LEVELSTATUSEMP_ID

的最早开始日期

首先我们添加一个unix时间列,然后找到该列的min(这是最新版本的pig,因此您可能需要更新您的版本)。

VOLUNTEER_ID

然后将开始日期和结束日期重新加入到您的数据集中,因为它看起来似乎没有办法将unix时间转换回日期。