私は、HDFSに保存されたファイルを持っていると私がしたいすべてが、私のスパークアプリケーションを実行した結果javaRDD
を計算し、新しいを格納するためにsaveAsTextFile()
を使用することですHDFSの "ファイル"。ファイルがすでに存在する場合
しかしスパークのsaveAsTextFile()
は動作しません。それはそれを上書きしません。私は、だから私はこの解決策を検索し、私はそれを動作させるために可能な方法は、新しいものを保存しようとする前に、HDFS APIを介してファイルを削除できることがわかっ
を試してみました何
。
私は、コードを追加しました:私は私のスパークアプリケーションを実行しようとしたとき
FileSystem hdfs = FileSystem.get(new Configuration());
Path newFolderPath = new Path("hdfs://node1:50050/hdfs/" +filename);
if(hdfs.exists(newFolderPath)){
System.out.println("EXISTS");
hdfs.delete(newFolderPath, true);
}
filerdd.saveAsTextFile("/hdfs/" + filename);
、ファイルが削除されたが、私はFileNotFoundException
を取得しました。
この例外は、誰かがパスからファイルを読み込もうとしていて、ファイルが存在しない場合に発生することを考慮すると、ファイルを削除した後は読み込もうとするコードが存在しないため意味がありません。私のコードの
パート
JavaRDD<String> filerdd = sc.textFile("/hdfs/" + filename) // load the file here
...
...
// Transformations here
filerdd = filerdd.map(....);
...
...
// Delete old file here
FileSystem hdfs = FileSystem.get(new Configuration());
Path newFolderPath = new Path("hdfs://node1:50050/hdfs/" +filename);
if(hdfs.exists(newFolderPath)){
System.out.println("EXISTS");
hdfs.delete(newFolderPath, true);
}
// Write new file here
filerdd.saveAsTextFile("/hdfs/" + filename);
私はここで、最も単純なことを行うにしようとしていますが、私はこれが動作しない理由はわかりません。多分filerddは何とかパスに接続されていますか?
あなたはスタックトレースを追加することはできますか? – javadba