尝试从kafka源读取。我想从收到的消息中提取时间戳来进行结构化的火花流。 kafka(版本0.10.0.0) spark streaming(版本2.0.1)
答案 0 :(得分:1)
我建议一些事情:
假设您通过最新的Kafka Streaming Api (0.10 Kafka)
创建了一个流 E.g。你使用依赖:"org.apache.spark" %% "spark-streaming-kafka-0-10" % 2.0.1
根据上面的文档,比你创建一个流:
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "broker1:9092,broker2:9092",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[ByteArrayDeserializer],
"group.id" -> "spark-streaming-test",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean))
val sparkConf = new SparkConf()
// suppose you have 60 second window
val ssc = new StreamingContext(sparkConf, Seconds(60))
ssc.checkpoint("checkpoint")
val stream = KafkaUtils.createDirectStream(ssc, PreferConsistent,
Subscribe[String, Array[Byte]](topics, kafkaParams))
您的信息流将是ConsumerRecord[String,Array[Byte]]的DStream,您可以获得时间戳和键值,简单如下:
stream.map { record => (record.timestamp(), record.key(), record.value()) }
希望有所帮助。
答案 1 :(得分:1)
spark.read
.format("kafka")
.option("kafka.bootstrap.servers", "your.server.com:9092")
.option("subscribe", "your-topic")
.load()
.select($"timestamp", $"value")
字段“timestamp”是您正在寻找的。输入 - java.sql.Timestamp。确保您连接到0.10 Kafka服务器。早期版本中没有时间戳。 此处描述的完整列表 - http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html#creating-a-kafka-source-for-batch-queries