我想做
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
所以猪似乎不喜欢那样。我该如何做到这一点?
答案 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;