我尝试将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中做。感谢。
答案 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中作为文本文件 元素的表示。