Apache pig 使用CONCAT时无法打开alias的迭代器

Apache pig 使用CONCAT时无法打开alias的迭代器,apache-pig,Apache Pig,正在尝试从originaldata拆分列,并且需要重新联接。 为此,我创建了一个rowid和originaldata,并将col与originaldata分离,同时连接rowid originaldata = load '$input' using PigStorage('$delimiter'); rankedoriginaldata = rank originaldata; numericdata = foreach rankedoriginaldata generate CONCAT($0

正在尝试从originaldata拆分列,并且需要重新联接。 为此,我创建了一个rowid和originaldata,并将col与originaldata分离,同时连接rowid

originaldata = load '$input' using PigStorage('$delimiter');
rankedoriginaldata = rank originaldata;
numericdata = foreach rankedoriginaldata generate CONCAT($0,$split);
但我不能这样说

numericdata = foreach rankedoriginaldata generate CONCAT($0,$split);
命令

pig -x local -f seperator.pig -param input=data/StringNum.csv -param output=OUT/Numericfile -param delimiter="," -param split='$3'
它显示了下面的堆栈树

Pig Stack Trace
---------------
ERROR 1066: Unable to open iterator for alias numericdata

org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias numericdata
    at org.apache.pig.PigServer.openIterator(PigServer.java:838)
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:696)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:320)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:194)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:170)
    at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:84)
    at org.apache.pig.Main.run(Main.java:475)
    at org.apache.pig.Main.main(Main.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:208)
Caused by: java.io.IOException: Job terminated with anomalous status FAILED
    at org.apache.pig.PigServer.openIterator(PigServer.java:830)
    ... 12 more
================================================================================
但当我这么做的时候

numericdata = foreach originaldata generate CONCAT($0,$split);
我得到了预期的输出

怀疑:加载数据时元组的顺序是否会改变? 如果我们正在加载数据,请说

1,4,6
3,8,9
2,4,5
订货怎么样 无论它是否像

1,6,4
8,9,3...

首先尝试将
CONCAT
的参数转换为chararray:

numericdata = foreach originaldata generate CONCAT((chararray)$0,(chararray)$split);
我认为演员阵容是必要的,因为
CONCAT
需要两个字符<但是,code>RANK会生成一个Long(将其作为$0传递给
CONCAT


关于您的疑问:元组中字段的顺序不会改变。然而,关系中元组的顺序可能会改变。

我给出一个字段作为参数,即如果我给出$3,那么我将得到元组的第4个字段。CONCAT($0,$3)对于在这里查找此帖子的人来说是一个。是的,Fred感谢它起作用。为什么我们需要投下?关于我在问题中提到的疑问呢?我使用的是Pig版本0.11.0-cdh4.6.0。所以我可以做多个CONCAT.CONCAT($0,\t,$3)。为此,我应该将其转换为chararray。很抱歉,我没有得到U。但是,关系中元组的顺序可能会更改。意思是?如果您与元组
a1、a2\r\n b1、b2\r\n c1、c2有关系,则无法确保看到相同顺序的行。每行中字段的顺序不会改变。这意味着行可以洗牌。但字段之间不能洗牌。我说的对吗?如果对包进行的任何操作都可以改变顺序,我说的对吗?