由于括号和逗号,PigUnit测试失败

时间:2014-01-09 14:34:19

标签: unit-testing apache-pig

我正在尝试创建一个更改列顺序的PIG脚本。这是我到目前为止所提出的:

inputdata = LOAD 'path/to/file/on/hdfs' USING PigStorage() AS (param1:chararray, param2:chararray, param3:chararray);
outputdata = FOREACH inputdata GENERATE param1, param3, param2;
DUMP outputdata;

我还没有在HDFS上试过这个,但我想我会继续先写单元测试。不幸的是它不起作用。

单元测试代码:

PigTest test = new PigTest("path_to_script.pig");
FixHadoopOnWindows.runFix();

String[] input = {
    "valueparam1\tvalueparam2\tvalueparam3"
};

String[] output = {
    "valueparam1\tvalueparam3\tvalueparam2"
};

test.assertOutput("inputdata", input, "outputdata", output);

FixHadoopOnWindows位是一个修复,所以我可以轻松地在Windows机器上运行我的单元测试。我在一些博客中找到了它,它帮助我解决了我遇到的许可问题。

所以现在我的测试运行了,但问题是assertOutput失败了。当我检查差异时,我明白了:

预期:

valueparam1    valueparam3    valueparam2

实际值:

(valueparam1,valueparam3,valueparam2)

所以我得到这些括号和逗号是我从未要求的。现在我不确定这是否是我的单元测试代码或我的实际脚本中的错误,所以任何让我入门的建议都会很棒。感谢。

2 个答案:

答案 0 :(得分:2)

您的代码看起来不错。括号表示您的关系outputdata由具有三个值的元组组成。

如果您以后想要按标签分隔数据,请执行STORE outputdata INTO 'dest' USING PigStorage('\t');

http://pig.apache.org/docs/r0.11.0/basic.html#Data+Types+and+More

答案 1 :(得分:1)

想出来。 PigUnit读出outputdata值,这是PIG中的元组。直到我将它存储到文件中,才将元组转换为制表符分隔的记录。