Hadoop和Cassandra比较2行

时间:2013-07-05 13:28:12

标签: hadoop cassandra bigdata datastax-enterprise brisk

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

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”Diff:20} {Col2:“Tom”V2:“90”Diff:-10}

首先,我想用Hadoop对此进行编码,但我看到一个问题,我可以为地图流程定义两个键吗?

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

我希望有人有一个tipp吗?

BG, 丹尼

1 个答案:

答案 0 :(得分:0)

我不明白减法基数将代表哪一行? 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} 

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

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

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

现在在reduce步骤中,您可以轻松执行减法操作并将必要的列编写为“diff”到数据库