Kafka Spark流媒体 - createDirectStream

时间:2017-11-30 15:57:16

标签: apache-kafka spark-streaming

我们正在尝试使用Spark Streaming从Kafka获取大约80多个主题的数据 - 作为其中的一部分,我们有以下代码尝试将每个主题的数据放入其单个文件夹中。使用下面的代码,我们可以订阅Kafka的80多个主题 - 获取数据 - 创建单个文件夹 - 也可以登陆数据。我们遇到的问题是 - 没有为每个单独的主题解析数据,即从Kafka(针对88个主题)接收的整个数据块被放入每个单独的主题文件夹中。我们假设我们错过了以下代码的技巧,我们没有正确解析'foreachRDD',所以任何帮助都会受到高度赞赏。

val stream =KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaDirectParams,topicsSet )

var offsetRanges = Array.empty[OffsetRange]

stream.transform{ rdd => offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges rdd }.foreachRDD { rdd => for (o <- offsetRanges) {

loggingPlease(s"${o.topic} ${o.partition} ${o.fromOffset} ${o.untilOffset}",log4jprops)

println(s"${o.topic} ${o.partition} ${o.fromOffset} ${o.untilOffset}")

val df = rdd.toDF() val cal = Calendar.getInstance()

//val topicName = o.topic //KA_M_L_AAA_TABLE1

//val savePath = parentFolder +"/"+o.topic.split("_")(4)+"/"+o.topic.split("_")(5) +"/"+cal.get(Calendar.YEAR).toString + (cal.get(Calendar.MONTH) + 1).toString + cal.get(Calendar.DAY_OF_MONTH).toString

val savePath = parentFolder +"/"+o.topic.split("_")(3)+"_A/"+o.topic.split("_")(4) +"/DATA".toString

//val savePath = parentFolder +"/" + o.topic+ "/" df.repartition(1).write.mode(SaveMode.Append).avro(savePath) loggingPlease("RDD pulling completed",log4jprops) } }

0 个答案:

没有答案