pig脚本

waxmsbnn  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(347)

我正在整理员工志愿者的资料。无法跟踪员工是否已注册为志愿者,以便他可以注册为新志愿者并获得新的志愿者id。我有一个数据输入,可以将每个志愿者id与其emp id绑定。需要清理志愿者数据,以便我们可以了解员工如何从一个志愿者级别移动到另一个级别以及何时移动。
业务逻辑是,当有重叠的日期时,我们为员工提供从开始日期到结束日期之间的最高级别。
我发布了一个数据输入示例和输出应该是什么。
有没有可能用Pig的脚本来做这个?有人能帮帮我吗
输入:

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

需要输出:(输出中不需要自愿者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
vq8itlhq

vq8itlhq1#

似乎您希望数据中的每一行都有最早的开始日期 V_LEVEL , STATUS , EMP_ID ,和 VOLUNTEER_ID 首先,我们添加一个unix时间列,然后找到该列的最小值(这是pig的最新版本,因此您可能需要更新您的版本)。

data_with_unix = foreach data generate EMP_ID, VOLUNTEER_ID, V_LEVEL, STATUS, START_DATE, END_DATE, ToUnixTime((datetime)START_DATE) as unix_time;
grp = group data_with_unix by (EMP_ID, VOLUNTEER_ID, V_LEVEL, STATUS);
max_date = foreach grp generate group, MIN(data_with_unix.unix_time);

然后将开始日期和结束日期连接回您的数据集中,因为在那里,似乎目前没有办法将unix时间转换回日期。

相关问题