2016-02-05 56 views
0

我認爲有可能是一個簡單的解決這個,如果有人知道如何遍歷基於文件名的一組文件和輸出值的我想知道在斯卡拉創造價值,通過文件迭代。基於文件名

我的問題是,我想在一組每個月圖中邊閱讀,然後創建一個單獨的月度圖表。

目前我這個做了很長的路要走,這是罰款,做一年價值,但我想一個方法來自動執行它。

你可以看到我的代碼,低於該希望清楚地表明我在做什麼。

//Load vertex data 
val vertices= (sc.textFile("D:~vertices.csv") 
    .map(line => line.split(",")).map(parts => (parts.head.toLong, parts.tail))) 

//Define function for creating edges from csv file 
def EdgeMaker(file: RDD[String]): RDD[Edge[String]] = { 
    file.flatMap { line => 
    if (!line.isEmpty && line(0) != '#') { 
     val lineArray = line.split(",") 
     if (lineArray.length < 0) { 
     None 
     } else { 
     val srcId = lineArray(0).toInt 
     val dstId = lineArray(1).toInt 
     val ID = lineArray(2).toString 
     (Array(Edge(srcId.toInt, dstId.toInt, ID))) 
     } 
    } else { 
     None 
    } 
    } 
} 

//make graphs -This is where I want automation, so I can iterate through a 
//folder of edge files and output corresponding monthly graphs. 
val edgesJan = EdgeMaker(sc.textFile("D:~edges2011Jan.txt")) 
val graphJan = Graph(vertices, edgesJan) 
val edgesFeb = EdgeMaker(sc.textFile("D:~edges2011Feb.txt")) 
val graphFeb = Graph(vertices, edgesFeb) 
val edgesMar = EdgeMaker(sc.textFile("D:~edges2011Mar.txt")) 
val graphMar = Graph(vertices, edgesMar) 
val edgesApr = EdgeMaker(sc.textFile("D:~edges2011Apr.txt")) 
val graphApr = Graph(vertices, edgesApr) 
val edgesMay = EdgeMaker(sc.textFile("D:~edges2011May.txt")) 
val graphMay = Graph(vertices, edgesMay) 
val edgesJun = EdgeMaker(sc.textFile("D:~edges2011Jun.txt")) 
val graphJun = Graph(vertices, edgesJun) 
val edgesJul = EdgeMaker(sc.textFile("D:~edges2011Jul.txt")) 
val graphJul = Graph(vertices, edgesJul) 
val edgesAug = EdgeMaker(sc.textFile("D:~edges2011Aug.txt")) 
val graphAug = Graph(vertices, edgesAug) 
val edgesSep = EdgeMaker(sc.textFile("D:~edges2011Sep.txt")) 
val graphSep = Graph(vertices, edgesSep) 
val edgesOct = EdgeMaker(sc.textFile("D:~edges2011Oct.txt")) 
val graphOct = Graph(vertices, edgesOct) 
val edgesNov = EdgeMaker(sc.textFile("D:~edges2011Nov.txt")) 
val graphNov = Graph(vertices, edgesNov) 
val edgesDec = EdgeMaker(sc.textFile("D:~edges2011Dec.txt")) 
val graphDec = Graph(vertices, edgesDec) 

任何幫助或指針在這將不勝感激。

回答

0

可以使用星火語境wholeTextFiles映射文件名,並使用命名/電話/過濾字符串/等你的價值觀/輸出/等

val fileLoad = sc.wholeTextFiles("hdfs:///..Path").map { case (filename, content) => ... } 

星火語境文本文件只讀取數據,但不保留文件名稱。

----編輯----

對不起,我似乎誤解了這個問題;您可以使用

sc.wholeTextFiles("~/path/file[0-5]*,/anotherPath/*.txt").map { case (filename, content) => ... } 

星號*應加載路徑中的所有文件,假設它們都支持的輸入文件類型加載多個文件。

該讀將所有的文件連接爲1單一大RDD避免多次調用(因爲每個通話,您必須指定路徑和文件名是要避免我認爲)。

與文件名讀讓你GROUPBY文件名和應用您的圖形功能,每個組。