2016-12-06 59 views
0

我有4個信息就像是一個巨大的CSV文件:用hadoop獲得csv文件最大價值的更好方法是什麼?

DF Alice 20.4 
MG Bob 30.4 
MG Clara 14.3 
SP Daniel 40.2 
... 

我寫了一個Hadoop的map-reduce代碼來獲取所有表的主要價值:

映射:

public class BolsaFamiliaMapper extends MapReduceBase implements 
     Mapper<LongWritable, Text, Text, DoubleWritable> { 

    public void map(LongWritable key, Text value, OutputCollector<Text, 
     DoubleWritable> output, Reporter reporter) throws IOException { String 
     valueString = value.toString(); 
     String[] SingleData = valueString.split("\t"); 
     output.collect(new Text("Biggest"), new 
      DoubleWritable(Double.parseDouble(SingleData[2]))); 
    } 
} 

減速機:

public class BolsaFamiliaReducer extends MapReduceBase implements Reducer<Text, 
     DoubleWritable, Text, DoubleWritable> { 

    public void reduce(Text t_key, Iterator<DoubleWritable> values, 
      OutputCollector<Text,DoubleWritable> output, Reporter reporter) 
     throws IOException { 
     Text key = t_key; 
     double frequency = 0.0; 
     while (values.hasNext()) { 
      // replace type of value with the actual type of our value 
      DoubleWritable value = (DoubleWritable) values.next(); 
      if (value.get() > frequency) { 
       frequency = value.get(); 
      } 
     } 
     output.collect(key, new DoubleWritable(frequency)); 
    } 
} 

如果我深知,在減少EXE cution不會並行運行,因爲我使用的密鑰(「最大」)。

有沒有更好的方式來獲得這些重要的價值?

,我有另一個疑惑是我怎樣才能檢查UF(SP)的最大值的元組。是否可以在相同的地圖 - 減少?如果有可能,我可以用UF分類最大的價值嗎?

我在初學地圖,減少操作和Hadoop,而且我找不到在其他論壇上的任何答覆。

+0

您是否必須使用Java MapReduce?爲什麼不是豬? –

+0

是的,我有。我正在研究map-reduce,後者我也會對Pig進行測試。但是現在我需要使用Java MapReduce。 – j3r3mias

+0

我想你已經問了兩個問題在這裏...查看整體最大價值,我相信你需要一個減速,是的,因爲這將迫使'迭代器 values'把所有要比較的值。至於「按這個」UF「值分組。你用'SingleData [0]'替換''Biggest''' –

回答

0

首先,我相信MapReduceBase不贊成使用類,讓你在學習過時的方法...

關於後

有什麼更好的方式來獲得最大的價值的標題一個帶有hadoop的csv文件?

「更好」的方法是不使用Java MapReduce。其他工具(豬,蜂巢,火花等)通常要好得多,特別是對於這個簡單的任務。

現在,作爲認定從所有值最大 - 是的,你需要從地圖上看,這是被迫進入一個減速一個鍵,然後將所有關聯值掃描最大。你的代碼似乎是這樣做的。

關於第二個問題 - 你想在第一列組。只需使用該欄。現在

output.collect(new Text(SingleData[0]), new 
     DoubleWritable(Double.parseDouble(SingleData[2]))); 

,即理論上應該跑得比"Biggest"關鍵更快,因爲你必須爲每個輸出鍵許多減速。


至於看到的價值是什麼,還有,MapReduce的通常會吐出一個文件到HDFS無論你配置的作業輸出去。 Reducer類的output.collect方法對此負責。

+0

通過UF進行分組是有意義的,只獲得最大的價值,問題的發生是因爲我在數據庫中有很多UF。最後,我使用了兩個MapReuce類來解決這個問題。關於元組,我認爲這個問題並不清楚:我試圖獲得最大的價值並保存csv文件的所有行('SP Daniel 40.2'),我不知道該怎麼做。 – j3r3mias

+0

很酷。隨意接受使用帖子 –

+0

旁邊的複選標記的答案關於已棄用的課程,我不知道這個,但出於目的(學習MapReduce範例),這很好。 – j3r3mias

相關問題