1

Datastaxの Pig の例を使用すると、次のようにして Cassandra からデータをロードできます。

cassandra_data = LOAD 'cassandra://PigDemo/Scores' USING CassandraStorage()
   AS (name, columns: bag {T: tuple(score, value)});

次に、たとえば次のように集計を計算できます

total_scores = FOREACH cassandra_data GENERATE name, COUNT(columns.score) as counts,
   LongSum(columns.score) as total;

Pig リファレンスマニュアルを読んだ後、Cassandra に保存できるリレーションを生成するために、上記のコードをどのように書き換え/拡張できるかは明らかではありません。それはフォーマットを持っている必要があります

(<row_key>,{(<column_name1>,<value1>),(<column_name2>,<value2>)})

私たちの場合には

(name,{('counts',counts),('total',total)})

ASを使用してschemaを指定しようとして失敗しましたが、追加のGROUPステートメントを使用してそれを実行しようとしました。

grouped  = GROUP total_scores by name;
cass_in = FOREACH grouped GENERATE group, total_scores.(co,total);

しかし、私が見逃している簡単な方法があるに違いないと感じています。どんな助けでも大歓迎です。

4

1 に答える 1

1

TOBAG() および TOTUPLE() UDF を使用する (0.8 以降)

FOREACH grouped GENERATE group, TOBAG(TOTUPLE('counts', total_scores.counts), TOTUPLE('total', total_scores.total));
于 2012-06-28T15:49:11.560 に答える