pig中的数据处理,标签分开
Posted
技术标签:
【中文标题】pig中的数据处理,标签分开【英文标题】:data processing in pig , with tab separate 【发布时间】:2017-08-28 16:01:14 【问题描述】:我对 Pig 非常陌生,因此在尝试在 Pig 中执行非常基本的处理时遇到了一些问题。
1- 使用 Pig 加载该文件
2- 编写一个处理逻辑来根据 Date 过滤记录,例如,这些行有 2 列 col_1 和 col_2 (假设列是 chararray ),我只需要获取 col_1 和之间有 1 天差异的记录col_2.
3- 最后将过滤后的记录存储在 Hive 表中。
输入文件(制表符分隔):-
2016-01-01T16:31:40.000+01:00 2016-01-02T16:31:40.000+01:00
2017-01-01T16:31:40.000+01:00 2017-01-02T16:31:40.000+01:00
当我尝试时
A = LOAD '/user/inp.txt' USING PigStorage('\t') as (col_1:chararray,col_2:chararray);
我得到的结果如下:- 转储 A;
(,2016-01-03T19:28:58.000+01:00,2016-01-02T16:31:40.000+01:00)
(,2017-01-03T19:28:58.000+01:00,2017-01-02T16:31:40.000+01:00)
不确定为什么? 请有人帮助我解决如何解析制表符分隔的文件以及如何将该 chararray 转换为 Date 并根据 Day 差异进行过滤?
谢谢
【问题讨论】:
加载语句的架构部分很可能有空间。 谢谢,我解决了这个问题。实际上,一开始还有一个字段,我将其定义为 int ,更改为 long 并且有效。 【参考方案1】:使用ToDate 将列转换为日期时间对象并使用DaysBetween。这应该给出差异,如果差异 == 1 则过滤。最后将其加载到 hive。
A = LOAD '/user/inp.txt' USING PigStorage('\t') as (col_1:chararray,col_2:chararray);
B = FOREACH A GENERATE DaysBetween(ToDate(col_1,'yyyy-MM-dd HH:mm:ss'),ToDate(col_2,'yyyy-MM-dd HH:mm:ss')) as day_diff;
C = FILTER B BY (day_diff == 1);
STORE C INTO 'your_hive_partition' USING org.apache.hive.hcatalog.pig.HCatStorer();
【讨论】:
只是想知道如果 col_1 和 col_2 在 unix_time_stamp 中,你能帮我写代码吗?相同的功能不起作用?有什么帮助吗? 它应该可以工作,只需使用没有任何格式字符串的 ToDate(col_1)。以上是关于pig中的数据处理,标签分开的主要内容,如果未能解决你的问题,请参考以下文章
无法将数据加载到 Pig 中的 Hortonworks Sandbox