使用 pig 将数据投射到日期时间时遇到问题。导入以下数据集,制表符分隔,我添加了 \t 来说明。
5000001 \t 1133938 \t 1273719 \t 2008-06-01 00:03:35.0
我想取最后一个值 (2008-06-01 00:03:35.0) 并提取月份。将其加载为 DateTime 会产生一个空白字段。所以我想将它作为字符数组导入,然后使用 toDate 将它转换为我可以使用 getMonth 的 dateTime 字段。
当我在 shell 中尝试时,我得到了这个:
grunt> orders = load '/home/cloudera/Desktop/orders1' using PigStorage('\t') AS (orderID:int, cusID:int, productId:chararray, time:chararray);
grunt> to_date = FOREACH orders GENERATE toDate(time,'yyyy-MM-dd HH:mm:ss.S') as (dTime:DateTime), cusID;
2017-04-19 01:13:46,206 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve toDate using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]
Details at logfile: /home/cloudera/pig_1492588751037.log
日志文件包含以下内容:
错误 1070:无法使用导入解析 toDate:[, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]
解析失败:Pig 脚本解析失败:无法生成逻辑计划。嵌套异常:org.apache.pig.backend.executionengine.ExecException: ERROR 1070: 无法使用导入解析 toDate: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin .] 在 org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:196) 在 org.apache.pig.PigServer$Graph.validateQuery(PigServer.java:1660) 在 org.apache.pig.PigServer$Graph .registerQuery(PigServer.java:1633) 在 org.apache.pig.PigServer.registerQuery(PigServer.java:587) 在 org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:1093) 在 org。 apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:501) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:198) 在 org.apache.pig.tools。 grunt.GruntParser。parseStopOnError(GruntParser.java:173) at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69) at org.apache.pig.Main.run(Main.java:547) at org.apache .pig.Main.main(Main.java:158) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI) .java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util。 RunJar.main(RunJar.java:136) 原因:无法生成逻辑计划。嵌套异常:org.apache.pig.backend.executionengine.ExecException:错误 1070:无法使用导入解析 toDate:[, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin .] 在 org.apache.pig.parser.LogicalPlanBuilder。
Pig 函数名称区分大小写。它是ToDate()
。
grunt> to_date = FOREACH orders GENERATE ToDate(time,'yyyy-MM-dd HH:mm:ss.S') as (dTime:DateTime), cusID;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句