转换矩阵格式,烫伤

时间:2013-11-16 16:41:49

标签: hadoop matrix scalding

好的,所以,在烫伤时我们可以轻松使用矩阵,使用矩阵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

我需要这个在巨大尺寸的矩阵上进行操作,而且我不知道行数和列数(例如,如果文件可以给出大小?NxM)。

我试图用TextLine( args("input") )制作smth,但我不知道如何计算行号。我想在hadoop上转换矩阵,mb还有其他方法如何处理格式?烫伤是否可能?

1 个答案:

答案 0 :(得分:0)

以下答案不是我的,而是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")))