Spark saveAsTextFile 创建目录
Spark saveAsTextFile creating directory
我使用 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。
要么你 .collect()
所有数据并将你自己的保存方法写入单个文件,要么你 .repartition(1)
数据仍然会生成一个目录,但只有一个部分文件数据 (part-00000
)
它应该是这样工作的。您不指定文件名,只指定路径。 Spark 将在该目录中创建文件。如果您查看 saveAsTextFile 的方法定义,您会发现它需要一个路径:
public void saveAsTextFile(String path)
在您指定的路径中,它将为数据中的每个分区创建一个 part
文件。
我使用 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。
要么你 .collect()
所有数据并将你自己的保存方法写入单个文件,要么你 .repartition(1)
数据仍然会生成一个目录,但只有一个部分文件数据 (part-00000
)
它应该是这样工作的。您不指定文件名,只指定路径。 Spark 将在该目录中创建文件。如果您查看 saveAsTextFile 的方法定义,您会发现它需要一个路径:
public void saveAsTextFile(String path)
在您指定的路径中,它将为数据中的每个分区创建一个 part
文件。