2013-12-18 39 views
1

我有一個列表(製表符分隔.txt文件),如:名單在矩陣使用Hadoop

row col value 
1  1  3.2 
10 2  5.3 
25 3  2.2 
30 1  5.3 

而且我希望把它變成一個稀疏矩陣,如:

1 2 3 
1 3.2 
10  5.3 
25   2.2 
30 5.3 

然後填入零。

Hadoop這樣做的最簡單方法是什麼? (我需要使用Hadoop,因爲矩陣的大小約爲3 Tb ......)

回答

1

您可以使用Hive或Pig。下面是使用豬的例子:

A = load 'input.txt' USING PigStorage('\t') AS (row:long, col:int, value:float); 
B = foreach a generate SOMEUDF(A); 
store B into 'output.txt'; 

然後你只需要定義一個UDF:

public class SOMEUDF extends EvalFunc <Tuple> 
{ 
    public Tuple exec(Tuple input) throws IOException { 
     if (input == null || input.size() == 0) 
      return null; 
     try{ 
      // Generate the matrix line here and return. 
     }catch(Exception e){ 
      throw WrappedIOException.wrap("Caught exception processing input row ", e); 
     } 
    } 
}