在 Pig 中生成 Cassandra 友好关系
Posted
技术标签:
【中文标题】在 Pig 中生成 Cassandra 友好关系【英文标题】:Generate Cassandra friendly relation in Pig 【发布时间】:2012-06-19 10:13:49 【问题描述】:使用来自 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);
但是,我觉得一定有一种我想念的直截了当的方法。任何帮助表示赞赏。
【问题讨论】:
您能否提供您编写的将记录存储到 cassandra 中的完整代码行? 【参考方案1】:使用 TOBAG() 和 TOTUPLE() UDF(从 0.8 开始)
FOREACH grouped GENERATE group, TOBAG(TOTUPLE('counts', total_scores.counts), TOTUPLE('total', total_scores.total));
【讨论】:
以上是关于在 Pig 中生成 Cassandra 友好关系的主要内容,如果未能解决你的问题,请参考以下文章