首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与cassandra行相交

与cassandra行相交
EN

Stack Overflow用户
提问于 2012-08-01 06:18:27
回答 3查看 672关注 0票数 2

我们有cassandra column家族。每一行都有多列。列有名称,但值为空。如果我们有5-10个行键,我们如何找到出现在所有这些键中的列名。例如:

代码语言:javascript
复制
row1: php, programming, accounting
row2: php, bookkeeping, accounting
row3: php, accounting

必须返回:

代码语言:javascript
复制
result: php, accounting

注意,我们不能轻易地将整行加载到内存中,因为它可能包含1M+列的解决方案,不需要很快。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-03 05:05:27

为了做几行的相交,我们需要首先相交其中的两行,然后将结果与第三行相交,依此类推。

看起来在cassandra中,我们可以通过列名查询数据,这是一个相对较快的操作。

所以我们首先得到10k行的列切片。制作列名列表(在PHP Cassa中-将它们放入数组中)。然后从第二行中选择它们。

代码可能如下所示:

代码语言:javascript
复制
$x = $cf->get($first_key, <some column slice>);

$column_names = array();
foreach(array_keys($x) as $k)
   $column_names[] = $k;

$result = $cf->get($second_key, $column_slice = null, $column_names);

// write result somewhere, and proceed with next slice
票数 1
EN

Stack Overflow用户

发布于 2012-08-03 01:30:55

对列名进行排序,可以为每一行创建一个迭代器(该迭代器一次加载date的一部分,例如10k列)。现在将每个迭代器放入一个优先级队列(按下一个列名)。如果你将具有相同列名的迭代器的k倍作为队列,这是所有行之间的通用名称,在另一种情况下,我们移动到下一个元素并返回迭代器到队列。

票数 0
EN

Stack Overflow用户

发布于 2012-08-03 03:57:28

您可以使用Hadoop map/reduce作业,如下所示:

  • 映射输出键=列名
  • 映射输出值=行键
  • Reducer计算每列的行键,并使用以下模式将列名和计数输出到CF:

键:列名{ Count : count }

  • 您可以从该CF中以相反的顺序查询计数。第一个记录将是最大值,因此您可以继续迭代,直到值小于最大值为止。这将是你的交叉口。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11749846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档