久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

173次閱讀
沒有評論

共計 1953 個字符,預(yù)計需要花費 5 分鐘才能閱讀完成。

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

1、通配符的使用與簡介

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

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

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

通配符

名稱

匹配

*

星號

匹配 0 或多個字符

問號

匹配單一字符

[ab]

字符類別

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

續(xù)表

通配符

名稱

匹配

[^ab]

非字符類別

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

[a-b]

字符范圍

匹配一個在 {a,b} 范圍內(nèi)的

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

順序上要小于或等于 b

[^a-b]

非字符范圍

匹配一個不在 {a,b} 范圍內(nèi)

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

典順序上要小于或等于 b

{a,b}

或選擇

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

\c

轉(zhuǎn)義字符

匹配元字符 c

 
   

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

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

以下是一些文件通配符及其擴(kuò)展。

通配符

擴(kuò)展

/*

/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,用于排除匹配一個正則表達(dá)式的路徑。

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); 
 } 
}

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

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

以上是“MapReduce 中文件名通配與過濾的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計1953字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 潮州市| 石楼县| 德安县| 陆丰市| 溧水县| 青冈县| 滨海县| 嘉祥县| 武平县| 垣曲县| 临漳县| 合水县| 义马市| 永和县| 双桥区| 徐水县| 澄迈县| 屏边| 义马市| 静海县| 余姚市| 安庆市| 清徐县| 乐都县| 库伦旗| 同德县| 格尔木市| 凌源市| 雷山县| 汉沽区| 民丰县| 贵定县| 汕头市| 修武县| 寿宁县| 玛曲县| 儋州市| 阿克苏市| 长白| 安庆市| 华蓥市|