2017-11-27 10 views
0

私は最近作成したファイル(毎日dirで作成されたファイル)をHDFS上のディレクトリから取り出して、それ以降の処理のためにその中のデータを読む必要があるScala-Sparkプログラムに取り組んでいます。私の研究から 私はスカラ座を使用して2日古いファイルを取得するためのコードの下に見つけた:HDFS上に存在するファイルの作成日を取得する方法は?

import java.nio.file._ 
import java.time._ 
import java.time.temporal.ChronoUnit.DAYS 
val isMoreThan2DaysOld = Files.getLastModifiedTime(path).toInstant.plus(2, DAYS) isBefore Instant.now 

をしかし、このコードは、HDFS上に存在するファイルでは動作しません。誰でも私に、Scalaを使用してHDFS上に存在するディレクトリから最新の作成ファイルを選択する方法を教えてください。

答えて

2

ファイルを修正した日付を取得するために、通常のhadoopファイルシステムApisをスカラで使用することができます。最新のものを選んでください。

import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 

val conf = spark.sparkContext.hadoopConfiguration 
val fs = FileSystem.get(conf) 
val dirPath = new Path("csvdatatest") 
val filestatus = fs.listStatus(dirPath) 
filestatus.foreach(f => println(f.getModificationTime)) 

これは、すべてのファイルのファイル変更/作成日を降順で並べ替えます。最新のファイルを最初のファイルとして選択できます。

注:sparkcontextを使用してhadoop設定を取得する場合は、設定でcore-site.xmlおよびhdfs-site.xmlを明示的に指定する必要はありません。私は上記のように使用しました。

しかし、あなたは擬似コード以下のようにあなたの構成を作成することができます(「HDFS ヴァルdirPathの=新しいパス: はコア-site.xmlのとHDFS-site.xmlの

val conf = new Configuration(); 
conf.addResource(new Path("<core-site-path>/core-site.xml")); 
conf.addResource(new Path("<hdfs-site-path>/hdfs-site.xml")); 
val fs = FileSystem.get(conf); 
+0

ラインのためにあなたのパスを指定します。 //quickstart.cloudera:8020/user/cloudera/pigdata ")は、" dirPath "上のファイルのパスが間違っているため、問題があります。 エラー: java.lang.IllegalArgumentExceptionが:間違ったFS:HDFS://quickstart.cloudera:8020 /ユーザー/ Clouderaの/ pigdata、予想:ファイル:/// 私は、ファイルとそれをしようとした場合:///: java.io.FileNotFoundException:ファイルのファイル:/quickstart.cloudera:8020 /ユーザー/ Clouderaの/ pigdataは コア-site.xmlのプロパティを持って存在しません: fs.defaultFS HDFS:// quickstart.cloudera:8020 私はここで何をしていますか? – Sidhartha

関連する問題