我在Cassandra ColumnFamily上有两行,想要比较具有相同Columnname的列的值,例如:
CF:用户
关键字:列:
................................................... ....
K1:{Col1:“Andy” V1:“100”} {Col2:“Tom” V2:“100”}
K2:{Col1:“Andy” V1:“120”} {Col2:“Tom” V2:“90”}
现在我想比较K2列与K2列的差异,以在Cassandra中获得此结果:
关键字:列:
................................................... .......................
K1:{Col1:“Andy” V1:“100”} {Col2:“Tom” V2:“100”}
K2:{Col1:“Andy” V1:“120”差异:20} {Col2:“Tom” V2:“90”差异:-10}
起初,我想使用Hadoop对此进行编码,但我看到一个问题,我无法为 map 流程定义两个键?
选择Haddop是因为它必须是可扩展的解决方案。
我希望有人给小费吗?
BG,
丹尼
最佳答案
我不知道减法的基数将代表哪一行?是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”)写入数据库
关于hadoop - Hadoop和Cassandra比较2行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490078/