Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Spark saveAsTextFile创建目录_Hadoop_Apache Spark_Amazon Emr - Fatal编程技术网

Hadoop Spark saveAsTextFile创建目录

Hadoop Spark saveAsTextFile创建目录,hadoop,apache-spark,amazon-emr,Hadoop,Apache Spark,Amazon Emr,我已经使用ApacheSpark在java中实现了以下代码。 我正在AWS EMR上运行这个程序。 我刚刚从文件中的单词计数示例中实现了一个简单的程序。 我正在从HDFS读取文件 public class FileOperations { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("HDFS"); JavaSparkConte

我已经使用ApacheSpark在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");
    }

}
公共类文件操作{
公共静态void main(字符串[]args){
SparkConf conf=new SparkConf().setAppName(“HDFS”);
JavaSparkContext sparkContext=新的JavaSparkContext(conf);
javarddtextfile=sparkContext.textFile(“hdfs:/user/hadoop/test.txt”);
System.out.println(“程序启动”);
javapairdd counts=textFile
.flatMap(s->array.asList(s.split(“”).iterator()
.mapToPair(word->new Tuple2(word,1))
.reduceByKey((a,b)->a+b);
counts.foreach(f->System.out.println(f.toString());
saveAsTextFile(“hdfs:/user/hadoop/output.txt”);
System.out.println(“程序完成”);
}
}
上述程序中的问题是counts.saveAsTextFile(“hdfs:/user/hadoop/output.txt”)没有创建文本文件,而是创建了一个目录
output.txt

以上代码中有什么错误。 这是我第一次使用Spark和EMR


要么你
.collect()
收集所有数据并将你自己的保存方法写入一个文件,要么你
.repartition(1)
重新分区(1)仍然会生成一个目录,但只有一个包含数据的零件文件(
零件-00000

<。您不指定文件名,只指定路径。Spark将在该目录中创建文件。如果查看方法定义,您会发现它需要一个路径:

public void saveAsTextFile(字符串路径)


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

这就是它应该如何工作的。您不指定文件名,只指定路径。Spark将在该目录中创建文件,每个分区一个。谢谢。完成。我找到了我的文件。请将您的答案发布在“答案”部分,以便我可以将此问题标记为已解决。如果路径不存在,我是否需要运行mkdir来创建目录结构,然后复制dataSpark来为您执行此操作。它自己创建一个目录并将文件写入其中。正如output.txt是spark在上述场景中创建的目录一样。