在猪身上产生卡桑德拉友好关系

时间:2012-06-19 10:13:49

标签: cassandra apache-pig

使用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引用manual后,对我来说,如何重写/扩展代码以产生一个可以存储回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);

然而,我觉得必须有一种我想念的直截了当的方式。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

使用TOBAG()和TOTUPLE()UDF(自0.8起)

FOREACH grouped GENERATE group, TOBAG(TOTUPLE('counts', total_scores.counts), TOTUPLE('total', total_scores.total));