题
好的,所以,在烫伤中,我们可以使用矩阵API轻松使用矩阵,并且可以这样做 - 以这样的方式:
val matrix = Tsv(path, ('row, 'col, 'val))
.read
.toMatrix[Long,Long,Double]('row, 'col, 'val)
.
但是如何从格式转换矩阵,如我们通常写入?有一些优雅的方式吗?
1 2 3
3 4 5
5 6 7
.
1 1 1
1 2 2
1 3 3
2 1 3
2 2 4
2 3 5
3 1 5
3 2 6
3 3 7
.
我需要它在具有巨大尺寸的矩阵上进行操作,并且我不知道行数和列(如果文件)可以给出大小吗?例如,例如:
我试图用TextLine( args("input") )
制作smth,但我dunno如何计算行号。我想在Hadoop上转换矩阵,MB有其他方式如何处理格式?是否有烫伤?
解决方案
以下答案不是我的,而是op的答案,这是一个问题。
这是我所做的事情,输出我想要的东西:
var prev: Long = 0
var pos: Long = 1
val zeroInt = 0
val zeroDouble = 0.0
TextLine( args("a") )
.flatMap('line -> 'number) { line : String => line.split("\\s+") }
.mapTo(('offset, 'line, 'number) -> ('row, 'val)) {
(offset: Long, line: String, number: String) =>
pos = if(prev == (offset + 1)) pos + 1 else 1
prev = offset + 1
(offset + 1, number) }
.filter('row, 'col, 'v) {
(row: Long, col: String, v: String) =>
val (row, col, v) = line
(v != zeroInt.toString) && (v != zeroDouble.toString) }
.write(Tsv(args("c")))
. 不隶属于 StackOverflow