我在scala类中使用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 :(得分: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)
或者您可以构建更复杂的日期过滤,例如在"人类"中选择日期。办法。现在应该很容易。