2016-08-01 35 views
0

ich newAPIHadoopFile in meiner scala-Klasse verwenden, um Text-Dateien von HDFS wie untenÖffnen von Dateien in Funken mit bestimmten Zeitstempeln

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) 

Aber jetzt zu lesen, muß ich Dateien in einem Bereich von Zeitstempeln öffnen Sie einfach. Irgendeine Idee, wie ich das tun könnte?

Danke, Jeff

Antwort

0

Wenn Ihre Dateien Zeitstempel direkt in Dateinamen enthalten, es ist ziemlich einfach:

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 

Diese alle dirs Juli in dieser dirs von 2016 und alle Dateien lesen. Sie können Mustervergleiche selbst bei Dateinamen durchführen, z. val path = "/hdfs/some_dir/2016-07-01/file-*.json"

Ist dies hilfreich oder suchen Sie nach System-Timestamps-Filterung?


Edit: Im Fall, dass Sie mit Systemzeitstempeln filtern:

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

Oder Sie können wie die Auswahl Datum in einer "menschlichen" Art und Weise komplexere Datum Filterung konstruieren. Es sollte jetzt einfach sein.

+0

Vielen Dank Cimox für Ihre Antwort. Ich suche nach einem Systemzeitstempelfilter. – Jeff

+0

Ich habe meine Post bearbeitet, mit dem obigen Code sollten Sie Dateien mit gegebenem Zeitstempel filtern können. Sie können diese gefilterten Dateien anschließend mit Spark öffnen. – cimox

+0

danke cimox :) – Jeff