使用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);
然而,我觉得必须有一种我想念的直截了当的方式。任何帮助表示赞赏。
答案 0 :(得分:1)
使用TOBAG()和TOTUPLE()UDF(自0.8起)
FOREACH grouped GENERATE group, TOBAG(TOTUPLE('counts', total_scores.counts), TOTUPLE('total', total_scores.total));