Apache spark Apache Spark:saveAsTextFile在独立模式下无法正常工作

Apache spark Apache Spark:saveAsTextFile在独立模式下无法正常工作,apache-spark,Apache Spark,我编写了一个简单的apachespark(1.2.0)Java程序来导入一个文本文件,然后使用saveAsTextFile将其写入磁盘。但是输出文件夹要么没有内容(只有_SUCCESS文件),要么有时有不完整的数据(仅来自1/2任务的数据) 当我在rdd上执行rdd.count()时,它显示了正确的数字,因此我知道rdd构造正确,只是saveAsTextFile方法不起作用 代码如下: /* SimpleApp.java */ import java.util.List; import org

我编写了一个简单的apachespark(1.2.0)Java程序来导入一个文本文件,然后使用saveAsTextFile将其写入磁盘。但是输出文件夹要么没有内容(只有_SUCCESS文件),要么有时有不完整的数据(仅来自1/2任务的数据)

当我在rdd上执行rdd.count()时,它显示了正确的数字,因此我知道rdd构造正确,只是saveAsTextFile方法不起作用

代码如下:

/* SimpleApp.java */
import java.util.List;

import org.apache.spark.api.java.*;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.Function;

    public class SimpleApp {
     public static void main(String[] args) {
       String logFile = "/tmp/READ_ME.txt"; // Should be some file on your system
       SparkConf conf = new SparkConf().setAppName("Simple Application");
       JavaSparkContext sc = new JavaSparkContext(conf);
       JavaRDD<String> logData = sc.textFile(logFile);

       logData.saveAsTextFile("/tmp/simple-output");
       System.out.println("Lines -> " + logData.count());
    }
  }
/*SimpleApp.java*/
导入java.util.List;
导入org.apache.spark.api.java.*;
导入org.apache.spark.SparkConf;
导入org.apache.spark.api.java.function.function;
公共类SimpleApp{
公共静态void main(字符串[]args){
字符串logFile=“/tmp/READ_ME.txt”;//应该是系统上的某个文件
SparkConf conf=new SparkConf().setAppName(“简单应用程序”);
JavaSparkContext sc=新的JavaSparkContext(conf);
JavaRDD logData=sc.textFile(日志文件);
logData.saveAsTextFile(“/tmp/simple output”);
System.out.println(“line->”+logData.count());
}
}

这是因为您正在保存到本地路径。您正在运行多台机器吗?因此,每个worker都保存到自己的/tmp目录中。有时,您让驱动程序执行任务,因此您可以在本地获得部分结果。确实,您不想混合使用分布式模式和本地文件系统。

您可以尝试下面的代码(例如)

JavaSparkContext sc=新的JavaSparkContext(“本地或您的网络IP”、“应用程序名称”);
JavaRDD lines=sc.textFile(“文件路径”,分区数).count();

然后打印文件中包含的行数。

嗨,肖恩,谢谢你的回答。。是的,这是一个8节点独立群集。。我实际上检查了每台工作机器上的本地目录,它们都是具有相同输出目录名的文件夹,但只包含一个带有一些工作文件的临时文件夹。但是,我认为不在本地文件系统中使用分布式模式是很有意义的。我将尝试使用hdfs。再次感谢。您还可以使用NFS挂载(例如/数据),该挂载在所有节点上都可见,用于读取/写入文件。可能比设置HDFSF更简单这可能是的一个副本。这些问题有几个答案,描述了输出到一个本地文件的方法。
JavaSparkContext sc = new JavaSparkContext("local or your network IP","Application name");
JavaRDD<String> lines = sc.textFile("Path Of Your File", No. of partitions).count();