FileStreamを使用して、Spark(ストリーミングコンテキスト)からhdfsディレクトリ内のファイルを読み取ります。しばらくしてSparkがシャットダウンして起動した場合、ディレクトリ内の新しいファイルを読みたいと思います。 Sparkによってすでに読み取られて処理されたディレクトリ内の古いファイルを読みたくありません。ここで重複を避けようとしています。
val lines = ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/File")
役立つコードスニペットはありますか?
FileSystem
APIを使用できます。
import org.Apache.hadoop.fs.{FileSystem, Path}
val fs = FileSystem.get(sc.hadoopConfiguration)
val outPutPath = new Path("/abc")
if (fs.exists(outPutPath))
fs.delete(outPutPath, true)
fileStream
は既にそれを処理しています-その Scaladoc から:
新しいファイルのHadoop互換ファイルシステムを監視し、指定されたキーと値のタイプと入力形式を使用してそれらを読み取る入力ストリームを作成します。
つまり、fileStream
は、新しいファイル(ストリーミングコンテキストの開始後に作成された)、以前にフォルダーに既に存在していたファイルのみをロードしますストリーミングアプリケーションを開始した場合は無視されます。