0

我在 Cassandra ColumnFamily 上有两行,想要比较具有相同列名的列的值,例如:

CF:用户

键:列:
.................................................. ...........

K1:{Col1:“安迪”V1:“100”} {Col2:“汤姆”V2:“100”}

K2:{Col1:“安迪”V1:“120”} {Col2:“汤姆”V2:“90”}

现在我想比较差异 K2 列与 K1 列以在 Cassandra 中获得此结果:

键:列:
.................................................. …………………………………………………………………………………………………………………………

K1:{Col1:“安迪”V1:“100”} {Col2:“汤姆”V2:“100”}

K2:{Col1:“安迪”V1:“120”差异:20} {Col2:“汤姆”V2:“90”差异:-10}

起初我想用 Hadoop 编写代码,但我看到一个问题,我无法为映射进程定义两个键?

Haddop 是选择,因为它必须是一个可扩展的解决方案。

我希望有人给小费吗?

BG,丹尼

4

1 回答 1

0

我不明白减法的基数将由哪一行表示?K1[V1]-K2[V1] 还是反之?

好的,假设具有最近时间戳的行将是一个基础。

您的 Map 步骤应发出以下 (K => V):

// each value is a WritableComparable object to allow sorting by timestamp

"Andy" => {"key":K1, "value":100, timestamp1} 
"Tom"  => {"key":K1, "value":100, timestamp2} 
"Andy" => {"key":K2, "value":120, timestamp3} 
"Tom"  => {"key":K2, "value":90,  timestamp4} 

减少步骤将接收对数组,因为每个值都按时间戳排序:

"Andy" => [ {"key":K1, "value":100, timestamp1},
            {"key":K2, "value":120, timestamp3} ]

"Tom"  => [ {"key":K1, "value":100, timestamp2},
            {"key":K2, "value":90,  timestamp4} ]

现在在减少步骤中,您可以轻松执行减法并将必要的列(如“diff”)写入数据库

于 2013-07-06T14:47:13.963 回答