如何在猪拉丁中设置一个变量等于另一个变量

时间:2012-03-10 01:25:28

标签: sql apache-pig

我想做

register s3n://uw-cse344-code/myudfs.jar
-- load the test file into Pig
--raw = LOAD 's3n://uw-cse344-test/cse344-test-file' USING TextLoader as (line:chararray);
-- later you will load to other files, example:
raw = LOAD 's3n://uw-cse344/btc-2010-chunk-000' USING TextLoader as (line:chararray); 

-- parse each line into ntriples
ntriples = foreach raw generate FLATTEN(myudfs.RDFSplit3(line)) as (subject:chararray,predicate:chararray,object:chararray);

--filter 1
subjects1 = filter ntriples by subject matches '.*rdfabout\\.com.*' PARALLEL 50;
--filter 2
subjects2 = subjects1;

但是我收到了错误:

2012-03-10 01:19:18,039 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200:输入不匹配';'期待LEFT_PAREN 日志文件的详细信息:/home/hadoop/pig_1331342327467.log

所以猪似乎不喜欢那样。我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

我不认为那种“典型”的任务在猪身上起作用。从严格意义上讲,它并不是一种真正的编程语言 - 它是一种基于hadoop的高级语言,具有一些专门的功能。

我认为你需要简单地将subject1中的数据重新投射到subject2,例如:

subjects2 = foreach subjects1 generate $0, $1, $2;

另一种方法可能是使用LIMIT函数和一些荒谬的高参数。

subjects2 = subjects2 LIMIT 100000000;

可能有很多理由说明为什么没有意义,但这是一个想法。

我觉得你正在考虑用编程语言做事情

  • 我发现很少像你想要的那样有效,但是一旦你认为猪就可以完成工作。

答案 1 :(得分:0)

我理解你的DataScience课程的例子。 这很奇怪,但我发现了同样的问题。此代码适用于数据量,而不是另一个数据。

因为我们需要更改参数,所以我使用了这段代码:

filtered2 = foreach filtered generate subject as subject2, predicate as predicate2, object as object2;