2017-05-02 10 views
1

Apache Sparkを使用してJavaで次のコードを実装しました。 AWS EMRでこのプログラムを実行しています。 ファイル内の単語数の例から単純なプログラムを実装しました。 私はHDFSからファイルを読んでいます。スパークsaveAsTextファイル作成ディレクトリ

public class FileOperations { 

    public static void main(String[] args) { 

     SparkConf conf = new SparkConf().setAppName("HDFS"); 
     JavaSparkContext sparkContext = new JavaSparkContext(conf); 
     JavaRDD<String> textFile = sparkContext.textFile("hdfs:/user/hadoop/test.txt"); 
     System.out.println("Program is stared"); 
     JavaPairRDD<String, Integer> counts = textFile 
       .flatMap(s -> Arrays.asList(s.split(" ")).iterator()) 
       .mapToPair(word -> new Tuple2<>(word, 1)) 
       .reduceByKey((a, b) -> a + b); 



     counts.foreach(f -> System.out.println(f.toString())); 

     counts.saveAsTextFile("hdfs:/user/hadoop/output.txt"); 
     System.out.println("Program finished"); 
    } 

} 

上記のプログラムで問題がcounts.saveAsTextFile("hdfs:/user/hadoop/output.txt");あるディレクトリoutput.txtが作成される代わりに、テキストファイルを作成していません。

上記のコードで何が間違っていますか。 私はSparkとEMRで作業しているのは初めてです。

enter image description here

+2

これはどのように動作するかです。ファイル名を指定するのではなく、パスだけを指定します。 Sparkはそのディレクトリ内にパーティションごとに1つのファイルを作成します。 –

+0

ありがとうございます。完了しました。私はファイルを見つけました。答えのセクションにあなたの答えを投稿してください。私はこの問題を解決済みとしてマークすることができます。 –

答えて

3

これはどのように動作するかです。ファイル名は指定せず、パスのみを指定します。 Sparkはそのディレクトリ内にファイルを作成します。あなたはsaveAsTextFileためのメソッド定義を見れば、あなたはそれがパスを期待していることがわかります。

public void saveAsTextFile(String path)

パス内では、それはあなたのデータの各パーティションのpartファイルを作成します指定。

1

あなた.collect()すべてのデータおよび単一のファイルに独自の保存方法を記述したり、まだディレクトリになります.repartition(1)データが、データを持つ唯一の部品ファイル(part-00000)のいずれかで

関連する問題