Hadoop и Cassandra для сравнения 2 строк

У меня есть две строки в Cassandra ColumnFamily, и я хочу сравнить значения столбцов с одним и тем же именем столбца, например:

CF: пользователь

Ключ: столбцы:
......................................................

K1: {Col1: "Энди" V1: "100"} {Col2: "Том" V2: "100"}

K2: {Col1: "Энди" V1: "120"} {Col2: "Том" V2: "90"}

Теперь я хочу сравнить разницу столбцов K2 с столбцами K1, чтобы получить этот результат в Кассандре:

Ключ: столбцы:
.........................................................................

K1: {Col1: "Энди" V1: "100"} {Col2: "Том" V2: "100"}

K2: {Col1: "Andy" V1: "120" Diff: 20} {Col2: "Tom" V2: "90" Diff: -10}

Сначала я хочу кодировать это с помощью Hadoop, но я вижу проблему, которая не может определить два ключа для процесса карты?

Haddop был выбором, потому что это должно быть масштабируемое решение.

Я надеюсь, у кого-нибудь есть подсказка для?

БГ, Дэнни

1 ответ

Решение

Я не понимаю, какой строкой будет представлена ​​база вычитания? 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" в базу данных.

Другие вопросы по тегам