我编写了一个简单的Apache Spark(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());
}
}
答案 0 :(得分:5)
这是因为您要保存到本地路径。你在运行多台机器吗?所以,每个worker都保存到自己的/ tmp目录中。有时,您让驱动程序执行任务,以便您在本地获得部分结果。你真的不想混合分布式模式和本地文件系统。
答案 1 :(得分:0)
您可以尝试以下代码(例如)..
vm.fields = [
{
key: 'textField',
type: 'input',
templateOptions: {
label: 'Text Label',
type: 'text',
value:vm.model.textField
},
watcher: {
listener: function(field, newValue, oldValue, scope, stopWatching) {
if(newValue) {
field.templateOptions.value = newValue;
}
}
}
}];
然后你打印否。包含在文件中的行。