2016-08-01 96 views
0

我用newAPIHadoopFile在我的斯卡拉類讀取HDFS的文本文件,如下打開文件與給定時間戳

val conf = new SparkConf 
val sc = new SparkContext(conf) 
val hc = new Configuration(sc.hadoopConfiguration) 
val dataFilePath = "/data/sample" 
val input = sc.newAPIHadoopFile(dataFilePath, classOf[TextInputFormat], classOf[LongWritable], classOf[Text], hc) 

但現在我只需要一個時間戳範圍內打開的文件。 有關我如何做到這一點的任何想法?

感謝, 傑夫

回答

0

如果您的文件包含時間戳直接在文件名,這是很容易:

val path = "/hdfs/some_dir/2016-07-*/*" 
val data = sqlContext.jsonFile(data) // or textFile e.g. 
data.count() // number of rows in all files matching pattern 

這將讀取所有迪爾斯2016年7月和那些顯示目錄中的所有文件。即使在文件名上也可以進行模式匹配,例如val path = "/hdfs/some_dir/2016-07-01/file-*.json"

這是否有幫助,或者您正在尋找系統時間戳過濾?


編輯: 如果你需要使用系統的時間戳來過濾:

val path = "/hdfs/some_dir/" 
val now: Long = System.currentTimeMillis/1000 
var files = new java.io.File(path).listFiles.filter(_.lastModified >= now) 

或者你可以構建更復雜的日期過濾像是在「人」的方式選擇日期。現在應該很容易。

+0

謝謝您的答覆Cimox。我正在尋找一個系統時間戳過濾器。 – Jeff

+0

我編輯了我的帖子,上面的代碼應該能夠使用給定的時間戳過濾文件。之後您可以使用Spark打開這些過濾的文件。 – cimox

+0

謝謝cimox :) – Jeff