我在Cassandra ColumnFamily上有两行,我想比较具有相同列名的列的值,例如:
CF:用户
键:列:
K1:{Col1:"Andy"V1:"100"}{Col2:"Tom"V2:"100)}
K2:{Col1:"Andy"V1:"120"}{Col2:"Tom"V2:"90"}
现在我想比较K2列和K1列的差异,以在Cassandra:中获得这个结果
键:列:
K1:{Col1:"Andy"V1:"100"}{Col2:"Tom"V2:"100)}
K2:{Col1:"Andy"V1:"120"差异:20}{Col2:"Tom"V2:"90"差异:-10}
一开始我想用Hadoop编写这个代码,但我看到了一个问题,我不能为映射进程定义两个键?
Haddop是我们的选择,因为它必须是一个可扩展的解决方案。
我希望有人能给我小费吗?
BG,Danny
我不明白子动作的基将由哪一行表示?K1[V1]-K2[V1],反之亦然?
好的,假设具有最近时间戳的行将作为基础。
映射步骤应发出以下信息(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} ]
现在,在reduce步骤中,您可以轻松地执行子操作,并将必要的列(如"diff")写入数据库