web-dev-qa-db-ja.com

scalaを使用してhdfsディレクトリ内のファイルを読み取った後、どのように削除しますか

FileStreamを使用して、Spark(ストリーミングコンテキスト)からhdfsディレクトリ内のファイルを読み取ります。しばらくしてSparkがシャットダウンして起動した場合、ディレクトリ内の新しいファイルを読みたいと思います。 Sparkによってすでに読み取られて処理されたディレクトリ内の古いファイルを読みたくありません。ここで重複を避けようとしています。

val lines = ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/File")

役立つコードスニペットはありますか?

10
user1125829

FileSystem AP​​Iを使用できます。

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)
18
Ishan Kumar

fileStreamは既にそれを処理しています-その Scaladoc から:

新しいファイルのHadoop互換ファイルシステムを監視し、指定されたキーと値のタイプと入力形式を使用してそれらを読み取る入力ストリームを作成します。

つまり、fileStreamは、新しいファイル(ストリーミングコンテキストの開始後に作成された)、以前にフォルダーに既に存在していたファイルのみをロードしますストリーミングアプリケーションを開始した場合は無視されます。

1
Tzach Zohar