Spark saveAsTextFile创建目录

时间:2017-05-02 12:53:37

标签: hadoop apache-spark amazon-emr

我使用Apache Spark在java中实现了以下代码。 我在AWS EMR上运行此程序。 我刚从示例中实现了文件中字数的简单程序。 我正在从HDFS读取文件。

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 个答案:

答案 0 :(得分:3)

这是应该如何运作的。您没有指定文件名,只是路径。 Spark将在该目录中创建文件。如果查看saveAsTextFile的方法定义,可以看到它需要一个路径:

public void saveAsTextFile(String path)

在您指定的路径中,它将为您数据中的每个分区创建一个part文件。

答案 1 :(得分:1)

要么.collect()所有数据并将自己的保存方法写入单个文件,要么.repartition(1)仍然会产生目录的数据,但只有一个部分文件包含数据( part-00000