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

对存储在 Hive 中的数据运行 Pig 查询

如何验证pig中的数据类型?

Pig 使用 LOAD 覆盖配置单元中的数据

PIG 中 Elephant-Bird UDF 中的 JSON 数组字段处理

处理 PIG Latin 中的重复记录