value saveAsTextFile不是org.apache.spark.streaming.dstream.DStream [(String,Long)]的成员

时间:2017-04-14 17:48:15

标签: scala apache-spark

我尝试将wordcount结果保存到文件中。

val wordCounts = words.map(x => (x, 1L)).reduceByKey(_ + _)
wordCounts.saveAsTextFile("/home/hadoop/datafile1")

但它正在显示

value saveAsTextFile is not a member of org.apache.spark.streaming.dstream.DStream[(String, Long)]              [error]     wordCounts.saveAsTextFile("/home/hadoop/datafile1")

我正在使用spark 2.1。我展示了一个建议旧火花版本的答案。但我想在火花2.1中做。感谢。

2 个答案:

答案 0 :(得分:1)

您正在RDD上使用为DStream定义的方法。

这是RDD上的方法:

def saveAsTextFile(path: String): Unit

...使用说明" 使用元素的字符串表示将此RDD保存为文本文件。"

这是DStream上的方法:

saveAsTextFiles(prefix: String, suffix: String = ""): Unit

...使用说明" 使用元素的字符串表示将此DStream中的每个RDD保存为文本文件。每个批处理间隔的文件名是根据前缀和后缀生成的:" prefix-TIME_IN_MS.suffix。"

因此,方法签名在名称和参数方面都不同。

在您的代码中,wordCounts显然是DStream,因此它没有saveAsTextFile方法。

但是,我觉得你混淆了抽象,并且真的想写一个RDD微量补丁中包含的DStream个体。要做到这一点:

counts.foreachRDD { rdd => 
  ...         
  rdd.saveAsTextFiles(s"/home/hadoop/datafile-$timestamp")

}

答案 1 :(得分:0)

API documentation提到API为“saveAsTextFiles”

saveAsTextFiles(String prefix, String suffix)
  

使用字符串将每个RDD保存在此DStream中作为文本文件   元素的表示。