簡體   English   中英

Hadoop映射器:行與文件

[英]Hadoop mappers: lines vs files

我正在學習Hadoop / mapreduce,並且對拆分映射器的各種可能性有疑問。

在標准的“單詞計數”方案中,每個不同的過程都在唯一的一行上工作,並執行一些基本的數學運算(加法)。 但是,是否有可能使每個進程都在一個唯一的文件上工作? 例如,如果我有500,000個唯一文件,每個文件約為500萬,我可以告訴Hadoop每個進程應該對每個文件執行一些分析,然后對結果分析進行統計(例如,將結果平均起來)嗎?

例如,假設每個文件包含:

{name}
{data1}
{data2}
...
{dataN}

並且我想對此文件執行數學函數以基於{data1, ..., dataN}來獲取F({name}) = [value1, value2, value3] ,最后,我想找到每個{name}的所有可能的[value1, value2, value3]數組的平均值。 在這種情況下,如果我使用Hadoop在每一行上工作,那將無濟於事,因為每個data必須與一個name相關聯,因此我想讓Hadoop維護其所使用的name知識。

如果可能的話,將F的計算作為“ map”階段,然后將[value1, value2, value3]數組的平均作為“ reduce”階段嗎?

因此,將問題整合為一個明確的一類:如何讓Hadoop拆分文件而不是行的工作?

我們可以獲取文件名並將其輸出為映射器的輸出鍵。 映射器的輸出值可以是諸如value1,value2,value3等的值。獲取文件名的代碼段如下

InputSplit split = context.getInputSplit();
String fileName = split.getPath().getName();

在化簡器部分中,我們可以按照此處為文件名的鍵進行迭代,並執行必要的操作,例如平均值,總和等。化簡器輸出可以具有文件名和值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM