【问题标题】:Transforming matrix format, scalding转换矩阵格式,烫伤
【发布时间】:2013-11-16 16:41:49
【问题描述】:

好的,所以,在 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") ) 进行欺骗,但我不知道如何计算行号。我想在hadoop上转换矩阵,mb还有其他方法如何处理格式?可以烫伤吗?

【问题讨论】:

    标签: hadoop matrix scalding


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2013-06-12
      相关资源
      最近更新 更多