Итак, этот вопрос связан с вопросом Преобразование матричного формата, ошпаривание
Но теперь я хочу сделать операцию на спине. Итак, я могу сделать это таким образом:
Tsv(in, ('row, 'col, 'v))
.read
.groupBy('row) { _.sortBy('col).mkString('v, "\t") }
.mapTo(('row, 'v) -> ('c)) { res : (Long, String) =>
val (row, v) = res
v }
.write(Tsv(out))
Но там у нас проблема с нулями. Как мы знаем, scalding пропускает поля с нулевыми значениями. Итак, например, мы получили матрицу:
1 0 8
4 5 6
0 8 9
В формате scalding это:
1 1 1
1 3 8
2 1 4
2 2 5
2 3 6
3 2 8
3 3 9
Используя мою функцию, которую я написал выше, мы можем получить только:
1 8
4 5 6
8 9
И это неправильно. Итак, как я могу справиться с этим? Я вижу два возможных варианта:
- Чтобы найти способ, чтобы добавить нули (на самом деле, не знаю, как вставить данные)
- Писать свои операции над собственным матричным форматом (это нежелательно, потому что меня интересуют матричные операции Scalding, и я не хочу писать все свои собственные)
Мб есть какие-то методы, и можно ли не пропускать нули в матрице?