Так что этот вопрос связан с вопросом Transforming matrix format, scaldingпреобразования из родного формата матрицы, обжигающий
Но теперь, я хочу сделать операцию назад. Поэтому я могу сделать это таким образом:
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))
Но, у нас возникли проблемы с нулями. Как известно, обжиг пропускает поля нулевых значений. Так, например, мы получили матрицу:
1 0 8
4 5 6
0 8 9
В формате обжигающего это является:
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 и не хочу писать все из них самостоятельно)
Мб Есть некоторые методы, и я могу избежать пропусков нулей в матрице?
Хм, я вижу, у меня была идея перечислить ценности, но не знала, как это сделать. Thx за отличный комментарий! Да, это может привести к тому, что наша матрица будет очень большой, но для меня было очень интересно, как мы можем сделать разреженную матрицу не редкими. постскриптум Я не верю, кто ответил на мой вопрос ... – DaunnC