1

私はこの形式で自分のデータを持っています: student_id, course_id,grade,other_information. これは、数十億と言う多数の学生向けです。学生のデータを処理するために書かれた perl スクリプトがあります。そこで、Hadoop フレームワークを使用して、各生徒のデータを perl スクリプトにストリーミングすることでプロセスを高速化することを考えました。

これは私がやっている方法です:

student_data = LOAD 'source' using PigStorage('\t') As (stud_id:string,...)
grp_student = group student_data by stud_id;
final_data = foreach grp_student {
    flat_data = flatten(grp_student)
    each_stud_data = generate flat_data;
    result = STREAM each_stud_data THROUGH 'some perl script';
}

store final_data into '/some_location';

問題: このエラーが発生していますSyntax error, unexpected symbol at or near 'flatten'。ググってみましたがだめでした。誰か助けてくれませんか?

4

1 に答える 1

1

いくつかのヒント: ネストされた foreach では flatten は許可されていません。generate は最後のステートメントでなければなりません。

StreamコマンドについてPig docs :

About Data Guarantees
Data guarantees are determined based on the position of the streaming operator in the Pig script.

[...]
Grouped data – The data for the same grouped key is guaranteed to be provided to the streaming application contiguously
[...]

したがって、グループキーのすべてのデータを連続して取得するという事実に対処できるようにスクリプトを調整すると、うまくいく可能性があります。

student_data = LOAD 'source' using PigStorage('\t') As (stud_id:string,...);
grp_student = GROUP student_data BY stud_id;
flat_data = FOREACH grp_student GENERATE FLATTEN(student_data);
result = STREAM flat_data THROUGH 'some perl script';
于 2013-11-05T12:20:30.113 に答える