我正在尝试将我的Pair Rdd保存为Spark Streaming,但是在最后一步保存时出现错误。
这是我的示例代码
def main(args: Array[String]) {
val inputPath = args(0)
val output = args(1)
val noOfHashPartitioner = args(2).toInt
println("IN Streaming ")
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]")
val sc = new SparkContext(conf)
val hadoopConf = sc.hadoopConfiguration;
//hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
val ssc = new org.apache.spark.streaming.StreamingContext(sc, Seconds(60))
val input = ssc.textFileStream(inputPath)
val pairedRDD = input.map(row => {
val split = row.split("\\|")
val fileName = split(0)
val fileContent = split(1)
(fileName, fileContent)
})
import org.apache.hadoop.io.NullWritable
import org.apache.spark.HashPartitioner
import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat
class RddMultiTextOutputFormat extends MultipleTextOutputFormat[Any, Any] {
override def generateActualKey(key: Any, value: Any): Any = NullWritable.get()
override def generateFileNameForKeyValue(key: Any, value: Any, name: String): String = key.asInstanceOf[String]
}
//print(pairedRDD)
pairedRDD.partitionBy(new HashPartitioner(noOfHashPartitioner)).saveAsHadoopFile(output, classOf[String], classOf[String], classOf[RddMultiTextOutputFormat], classOf[GzipCodec])
ssc.start() // Start the computation
ssc.awaitTermination() // Wait for the computation to terminate
}
我正在保存的最后一步。我是流媒体的新手,所以这里一定有什么不足。 出现
之类的错误值partitionBy不是以下成员 org.apache.spark.streaming.dstream.DStream [(String,String)]
请帮助
答案 0 :(得分:0)
pairedRDD
的类型为DStream[(String, String)]
,而不是RDD[(String,String)]
。方法partitionBy
在DStream
上不可用。
也许要研究foreachRDD
上应该有的DStream
。
编辑:更多的上下文说明textFileStream
将在指定路径上设置目录监视,并且每当有新文件时将流传输内容。这就是流方面的来历。那是你要的吗?还是只想按原样读取目录的内容?然后是readTextFiles
,它将返回一个非流容器。