在 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 友好关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在pig中生成一定数量的元组?

如何在 Joomla 中生成友好的 url?

cassandra + pig 宽柱

将 PIG 与 cassandra 一起使用的限制

使用 pig 将小数导入 cassandra

如何在 Pig 中过滤 Cassandra TimeUUID/UUID