繁体   English   中英

简单的Spark结构化流式等效于KafkaUtils.createRDD,即通过指定偏移量将kafka主题读取为RDD吗?

[英]Simple Spark Structured Streaming equivalent of KafkaUtils.createRDD, i.e. read kafka topic to RDD by specifying offsets?

如何通过指定开始和结束偏移量将kafka主题中的数据读取到RDD?

KafkaUtils.createRDD 实验性的,API令人不快(它返回了一个庞大的Java ConsumerRecord类,该类甚至无法序列化,并将其放入KafkaRDDKafkaRDD重写了许多方法(例如persist)以抛出异常。

我想要的是一个像这样的简单API:

case class Message(key: String, 
                   value: String, 
                   offset: Long, 
                   timestamp: Long)

def readKafka(topic: String, offsetsByPartition: Map[Int, (Long, Long)])
             (config: KafkaConfig, sc: SparkContext): RDD[Message]

或类似的东西,其中key: Array[Byte]value: Array[Byte]

要从具有偏移量的kafka中读取内容,代码应类似于此处引用

val df = 
  spark.readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1,topic2")
  .option("startingOffsets", """{"topic1":{"0":23,"1":-2},"topic2":{"0":-2}}""")
  .option("endingOffsets", """{"topic1":{"0":50,"1":-1},"topic2":{"0":-1}}""")
  .load()

上面的代码将读取偏移量内的可用数据,然后您可以将列转换为字符串,并转换为对象Message

val messageRDD: RDD[Message] = 
  df.select(
    col("key").cast("string"), 
    col("value").cast("string"), 
    col("offset").cast("long"),
    col("timestamp").cast("long")
  ).as[Message].rdd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM