PIG 中的右移问题

Posted

技术标签:

【中文标题】PIG 中的右移问题【英文标题】:Issue with right shift in PIG 【发布时间】:2017-07-08 13:39:02 【问题描述】:

我有一个 CSV 文件,其中包含以下方式的数据:

data_id,data_text,data_author
1,"here some text...",anurag
2,"Hi, i am apsc...",apsc
3,"i am living in "NYC"",another user

我正在执行以下步骤来加载正确的数据 方法 1。

temp = LOAD'filepath' USING PigStorage(',');

当我转储温度时,数据在第二条记录中右移了一个额外的逗号。

方法 2: 使用换行符作为分隔符加载数据

temp = LOAD'filepath' USING PigStorage('\n');

它在 1 个袋子里给了我 1 条记录。

我再次尝试实施 RegEx 来打破袋子

mydata = FOREACH data GENERATE FLATTEN(REGEX_EXTRACT_ALL('\\s*,\\s*,\\s*'));

它正在抛出错误:

猪栈跟踪

ERROR 1045:无法推断匹配函数 对于 org.apache.pig.builtin.REGEX_EXTRACT_ALL 作为多个或没有 他们适合。请使用显式转换。

org.apache.pig.impl.logicalLayer.validators.TypeCheckerException: 错误 1059:协调输出时出现问题 ForEach 的架构 org.apache.pig.newplan.logical.visitor.TypeCheckingRelVisitor.throwTypeCheckerException(TypeCheckingRelVisitor.java:142) 在 org.apache.pig.newplan.logical.visitor.TypeCheckingRelVisitor.visit(TypeCheckingRelVisitor.java:182) 在 org.apache.pig.newplan.logical.relational.LOForEach.accept(LOForEach.java:76) 在 org.apache.pig.newplan.DependencyOrderWalker.walk(DependencyOrderWalker.java:75) 在 org.apache.pig.newplan.PlanVisitor.visit(PlanVisitor.java:52) 在 org.apache.pig.PigServer$Graph.compile(PigServer.java:1635) 在 org.apache.pig.PigServer$Graph.validateQuery(PigServer.java:1572) 在 org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1544) 在 org.apache.pig.PigServer.registerQuery(PigServer.java:516) 在 org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:991) 在 org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:412) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:194) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:170) 在 org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69) 在 org.apache.pig.Main.run(Main.java:538) 在 org.apache.pig.Main.main(Main.java:157) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:622) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:160) 原因: org.apache.pig.impl.logicalLayer.validators.TypeCheckerException: ERROR 1045:无法推断匹配函数 对于 org.apache.pig.builtin.REGEX_EXTRACT_ALL 作为多个或没有 他们适合。请使用显式演员表。在 org.apache.pig.newplan.logical.visitor.TypeCheckingExpVisitor.visit(TypeCheckingExpVisitor.java:775) 在 org.apache.pig.newplan.logical.expression.UserFuncExpression.accept(UserFuncExpression.java:88) 在 org.apache.pig.newplan.ReverseDependencyOrderWalker.walk(ReverseDependencyOrderWalker.java:70) 在 org.apache.pig.newplan.PlanVisitor.visit(PlanVisitor.java:52) 在 org.apache.pig.newplan.logical.visitor.TypeCheckingRelVisitor.visitExpressionPlan(TypeCheckingRelVisitor.java:191) 在 org.apache.pig.newplan.logical.visitor.TypeCheckingRelVisitor.visit(TypeCheckingRelVisitor.java:157) 在 org.apache.pig.newplan.logical.relational.LOGenerate.accept(LOGenerate.java:246) 在 org.apache.pig.newplan.DependencyOrderWalker.walk(DependencyOrderWalker.java:75) 在 org.apache.pig.newplan.PlanVisitor.visit(PlanVisitor.java:52) 在 org.apache.pig.newplan.logical.visitor.TypeCheckingRelVisitor.visit(TypeCheckingRelVisitor.java:174)

... 19 更多

请帮忙。

【问题讨论】:

【参考方案1】:

您可以使用csvexcelstorage 加载您的数据。您必须下载piggybank.jar 并在您的pigscript 中注册。

REGISTER /path_to_jar/piggybank.jar;
DEFINE CSVExcelStorage org.apache.pig.piggybank.storage.CSVExcelStorage();

A = LOAD 'filepath/file.txt' USING CSVExcelStorage(',') AS (f1:int,f2:chararray,f3:chararray);
DUMP A;

【讨论】:

以上是关于PIG 中的右移问题的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序,当字数不确定时的右移

信息的表示和处理

Pig 中的 SimpleTextLoader UDF

C语言 循环移位

PIG 中的日期格式问题

显示结果中的 Pig Udf