pig脚本中的按日期时间排序

efzxgjgh  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(308)

在pig0.11.0之后,引入了datetime基本变量类型进行处理。就我而言,我必须按日期和时间订货。我用这种方式

data = LOAD 'database_name.table_name' USING org.apache.hcatalog.pig.HCatLoader() AS (id:chararray,name:chararray,birth_date_time:chararray);

selected_data = FOREACH data GENERATE id, name,ToDate(birth_date_time,'yyyy-MM-dd HH:mm:ss') AS birth_date_time;

ordered_data = ORDER selected_data BY birth_date_time DESC;

DUMP ordered_data;

但我不工作。抛出此错误
org.apache.pig.impl.logicalayer.frontendexception:错误1066:无法打开别名cba的迭代器。后端错误:无法从备份的错误中重新创建异常:attemptid:attempt_1452577118821_0005_m_000000_3 info:error:org.joda.time.datetime.compareto(lorg/joda/time/readableinstant;)我在org.apache.pig.pigserver.openiterator(pigserver。java:872)位于org.apache.pig.tools.grunt.gruntparser.processdump(gruntparser。java:774)在org.apache.pig.tools.pigscript.parser.pigscriptparser.parse(pigscriptparser。java:372)在org.apache.pig.tools.grunt.gruntparser.parsestoponerror(gruntparser。java:198)在org.apache.pig.tools.grunt.gruntparser.parsestoponerror(gruntparser。java:173)在org.apache.pig.tools.grunt.grunt.exec(grunt。java:84)在org.apache.pig.main.run(main。java:607)在org.apache.pig.main.main(main。java:156)位于sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl。java:57)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:606)在org.apache.hadoop.util.runjar.main(runjar。java:212)原因:org.apache.pig.backend.executionengine.execute:错误2997:无法从备份的错误中重新创建异常:attemptid:attempt_1452577118821_0005_m_000000_3 info:error:org.joda.time.datetime.compareto(lorg/joda/time/readableinstant;)我在org.apache.pig.backend.hadoop.executionengine.mapreducelayer.launcher.geterrormessages(launcher。java:217)在org.apache.pig.backend.hadoop.executionengine.mapreducelayer.launcher.getstats(launcher。java:151)位于org.apache.pig.backend.hadoop.executionengine.mapreducelayer.mapreducelauncher.launchpig(mapreducelauncher)。java:429)在org.apache.pig.pigserver.launchplan(pigserver。java:1324)在org.apache.pig.pigserver.executecompiledlogicalplan(pigserver。java:1309)在org.apache.pig.pigserver.storeex(pigserver。java:980)在org.apache.pig.pigserver.store(pigserver。java:944)在org.apache.pig.pigserver.openiterator(pigserver。java:857) ... 12个以上
我们如何按日期和时间字段订购?

kuuvgm7e

kuuvgm7e1#

我建议您使用tounixtime(datetime)函数来订购日期列。
请在下面检查并这样做。

data = LOAD 'database_name.table_name' USING org.apache.hcatalog.pig.HCatLoader() AS (id:chararray,name:chararray,birth_date_time:chararray);

selected_data = FOREACH data { 
bdt = (datetime)ToDate(birth_date_time,'yyyy-MM-dd HH:mm:ss');
GENERATE id, name, bdt AS birth_date_time, ToUnixTime(bdt) AS birth_date_time_unix;
};

ordered_data = ORDER selected_data BY birth_date_time_unix DESC;

DUMP ordered_data;

请让我知道它是否有效。

相关问题