scala - 在给定时间戳下以星火打开文件

标签 scala hadoop apache-spark timestamp hdfs

我在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)

但是现在我只需要在一个时间戳范围内打开文件。
关于我该怎么做的任何想法?

谢谢,
杰夫

最佳答案

如果您的文件直接在文件名中包含时间戳,则非常简单:

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)

或者,您可以构建更复杂的日期过滤,例如以“人工”方式选择日期。现在应该很容易。

关于scala - 在给定时间戳下以星火打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690136/

相关文章:

scala - 发布到本地但进入项目本身

r - Hadoop中R的市场篮分析

hadoop - 读取 csv MapReduce 中的空单元格时的 ArrayIndexOutofBounds

azure - 运行但不执行任何 Spark 应用程序的 Azure Databricks 群集的成本

scala - 如何在从ensime启动的Scala REPL中自动完成?

scala - 如何在 Scala 中使用没有参数的构造函数参数创建 Case Class 的实例?

scala - 在 HDFS 上写入 DataFrame 期间出现 SparkException

Hadoop block 大小 vs 拆分 vs block 大小

Scala 和 Spark : Recycling SQL statements

scala - 将笛卡尔坐标组分组到apache Spark中的单元格