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 回答