中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MapReduce中文件名通配與過濾的示例分析

發布時間:2021-12-16 15:02:22 來源:億速云 閱讀:170 作者:小新 欄目:云計算

這篇文章主要為大家展示了“MapReduce中文件名通配與過濾的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“MapReduce中文件名通配與過濾的示例分析”這篇文章吧。

1、通配符的使用與簡介

在一步操作中處理批量文件,這個要求很常見。舉例來說,處理日志的MapReduce作業可能會分析一個月的文件,這些文件被包含在大量目錄中。Hadoop有一個通配的操作,可以方便地使用通配符在一個表達式中核對多個文件,不需要列舉每個文件和目錄來指定輸入。Hadoop為執行通配提供了兩個FileSystem方法:

public FileStatus[] globStatus(Path pathPattern) throws IOException  

public FileStatus[] globStatus(Path pathPattern, PathFilter filter) throws IOException

globStatus()返回了其路徑匹配于所供格式的FileStatus對象數組,按路徑排序。可選的PathFilter命令可以進一步指定限制匹配。
Hadoop支持的一系列通配符與Unix bash相同(見表3-2)。
表3-2:通配符及其作用

通配符

名稱

匹配

*

星號

匹配0或多個字符

問號

匹配單一字符

[ab]

字符類別

匹配{a,b}中的一個字符


續表

通配符

名稱

匹配

[^ab]

非字符類別

匹配不是{a,b}中的一個字符

[a-b]

字符范圍

匹配一個在{a,b}范圍內的

字符(包括ab),a在字典

順序上要小于或等于b

[^a-b]

非字符范圍

匹配一個不在{a,b}范圍內

的字符(包括ab),a在字

典順序上要小于或等于b

{a,b}

或選擇

匹配包含a或b中的一個的語句

\c

轉義字符

匹配元字符c


     

假設有日志文件存儲在按日期分層組織的目錄結構中。如此一來,便可以假設2007年最后一天的日志文件就會以/2007/12/31的命名存入目錄。假設整個文件列表如下:

/2007/12/30  
/2007/12/31  
/2008/01/01  
/2008/01/02

以下是一些文件通配符及其擴展。

通配符

擴展

/*

/2007/2008

/*/*

/2007/12 /2008/01

/*/12/*

/2007/12/30 /2007/12/31

/200?

/2007 /2008

/200[78]

/2007 /2008

/200[7-8]

/2007 /2008

/200[^01234569]

/2007 /2008

/*/*/{31,01}

/2007/12/31 /2008/01/01

/*/*/3{0,1}

/2007/12/30 /2007/12/31

/*/{12/31,01/01}

/2007/12/31 /2008/01/01


     

2、PathFilter對象

通配格式不是總能夠精確地描述我們想要訪問的文件集合。比如,使用通配格式排除一個特定的文件就不太可能。FileSystem中的listStatus()和globStatus()方法提供了可選的PathFilter對象,使我們能夠通過編程方式控制匹配:

package org.apache.hadoop.fs;  
 
public interface PathFilter {  
   boolean accept(Path path); 
}

PathFilter與java.io.FileFilter一樣,是Path對象而不是File對象。

例3-7:展示了一個PathFilter,用于排除匹配一個正則表達式的路徑。

public class RegexExcludePathFilter implements PathFilter {  
    
  private final String regex;  
 
  public RegexExcludePathFilter(String regex) {  
    this.regex = regex;  
  }  
 
  public boolean accept(Path path) {  
    return !path.toString().matches(regex);  
  }  
}

這個過濾器只留下與正則表達式不同的文件。我們將它與預先剔除一些文件集合的通配配合:過濾器用來優化結果。例如:

fs.globStatus( new Path("/2007/*/*"),   
               new RegexExcludeFilter("^.*/2007/12/31$")
)

以上是“MapReduce中文件名通配與過濾的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐都县| 新乐市| 濮阳市| 壤塘县| 岐山县| 茂名市| 襄樊市| 明溪县| 绥德县| 亳州市| 新昌县| 含山县| 蒙山县| 门头沟区| 格尔木市| 南通市| 孟津县| 县级市| 保德县| 桐柏县| 岗巴县| 山阴县| 西贡区| 额敏县| 霍城县| 江阴市| 翼城县| 通州区| 苏尼特左旗| 保德县| 江城| 平谷区| 海原县| 眉山市| 福建省| 怀宁县| 迭部县| 磐安县| 都江堰市| 古田县| 定结县|