wordCounts.dstream()。saveAsTextFiles(“LOCAL FILE SYSTEM PATH”,“txt”);不写入文件

时间:2015-11-22 21:56:58

标签: apache-spark streaming pyspark spark-streaming hadoop-streaming

我正在尝试将JavaPairRDD写入本地系统的文件中。代码如下:

 JavaPairDStream<String, Integer> wordCounts = words.mapToPair(
  new PairFunction<String, String, Integer>() {
    @Override
    public Tuple2<String, Integer> call(String s) {
      return new Tuple2<String, Integer>(s, 1);
    }
  }).reduceByKey(new Function2<Integer, Integer, Integer>() {
    @Override
    public Integer call(Integer i1, Integer i2) {
      return i1 + i2;
    }
  });
wordCounts.dstream().saveAsTextFiles("/home/laxmikant/Desktop/teppppp", "txt");

我正在尝试将日志或wordcount保存在文件中。但它无法保存在本地文件中(不是HDFS)。

我还尝试使用

保存HDFS
saveAsHadoopFiles("hdfs://10.42.0.1:54310/stream","txt")

以上行不会写入文件。任何人都可以告诉解决方案吗? stackoverflow上的各种解决方案都不起作用。

2 个答案:

答案 0 :(得分:1)

rdd.saveAsTextFile("C:/Users/testUser/file.txt")

它不会将数据保存到 file.txt 文件中。它将抛出 FileAlreadyExists异常。因为此方法将创建自己的文件并将rdd保存在该特定文件中。

尝试使用以下代码将rdd保存在文件中。

rdd.SaveAsTextFile("C:/Users/testUser")

它将在testUser文件夹下创建一个文件,并将rdd保存到该文件中。

答案 1 :(得分:0)

语法似乎正确

saveAsHadoopFiles("hdfs://10.42.0.1:54310/stream","txt");

但完整的语法是

wordCounts.saveAsHadoopFiles("hdfs://10.42.0.1:54310/stream","txt"); // no dstream()

我的猜测是数据存在于某个系统缓冲区并且没有写入。如果您尝试使用“nc”传输更多数据,那么您可能会看到一个正在创建数据的文件。这就是我的情况。