hadoop pig 使用日期时间字段加入

Posted

技术标签:

【中文标题】hadoop pig 使用日期时间字段加入【英文标题】:hadoop pig join using datetime field 【发布时间】:2014-07-01 22:14:25 【问题描述】:

我有两个数据集

messages.txt
2014-06-23 08:42:34, 34569
2014-06-23 08:42:35, 23945
2014-06-23 08:42:36, 45673
... etc

CPU.txt
2014-06-23 08:42:34, 99
2014-06-23 08:42:35, 80
2014-06-23 08:42:36, 83
... etc

我想使用时间戳加入表格,我想将其格式化为日期时间

这是我的尝试

MSG= load 'messages.txt' using pigstorage(',') as (date_time:chararray, msg_recv:int);
CPU= load 'CPU.txt' using pigstorage(',') as (date_time:chararray, cpu:int);
MSG_FORMATED = foreach MSG GENERATE ToDate(date_time, 'yyyy-MM-dd HH:mm:ss') as date_time, msg_recv;
CPU_FORMATED = foreach CPU GENERATE ToDate(date_time, 'yyyy-MM-dd HH:mm:ss') as date_time, cpu;

到目前为止一切顺利

我可以转储 MSG_FORMATED 和 CPU_FORMATED 并查看它们是日期时间格式

dump MSG_FORMATED;
2014-06-23T08:42:34.000-04:00, 34569
2014-06-23T08:42:35.000-04:00, 23945
2014-06-23T08:42:36.000-04:00, 45673

dump CPU_FORMATED;
2014-06-23T08:42:34.000-04:00, 99
2014-06-23T08:42:35.000-04:00, 80
2014-06-23T08:42:36.000-04:00, 83

现在我尝试加入时遇到问题!

(这应该是相当直接的?)

COMBINED = JOIN MSG_FORMATED BY date_time, CPU_FORMATED by date_time;
describe COMBINED; 
COMBINED: MSG_FORMATED::date_time: datetime, MSG_FORMATED::msg_recv: int, CPU_FORMATED::date_time: datetime, CPU_FORMATED::cpu: int

转储组合;

抛出错误

2014-07-01 13:10:23,065 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Failed!
2014-07-01 13:10:23,065 [main] WARN  org.apache.hadoop.mapred.JobConf - The variable mapred.child.ulimit is no longer used.
2014-07-01 13:10:23,070 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2997: Unable to recreate exception from backed error: AttemptID:attempt_1400260444475_25479_r_000000_3 Info:Error: org.joda.time.DateTime.compareTo(Lorg/joda/time/ReadableInstant;)

【问题讨论】:

有任何解决方案或仍然打开? 【参考方案1】:

您可以使用时间戳加入表,然后将其格式化为日期时间。

【讨论】:

所以不能在日期时间加入吗?展望未来,我将拥有格式略有不同的原始时间戳。 toDate 很棒,因为它可以使它们正常化。 是的,我认为 PIG 不喜欢在日期时间加入!如果你想这样做,你可以在 JOIN 之前转换为字符串(chararray)。

以上是关于hadoop pig 使用日期时间字段加入的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pig Group / 展平 / 加入

在 Hadoop/Pig 中使用匹配过滤

用 Pig Latin 为每组编写一个文件

Hadoop pig加入时间范围

hadoop/pig导入日志的多级目录

Pig - 如何将日期时间转换为 chararray