我是spark和kafka的新手,我希望将json格式的数据从kafka转发到spark中。我的问题是定义数据映射以及如何定义KafkaUtils.createDirectStream()内部的参数
val ssc = new StreamingContext(sparkConfig, Seconds(10))
case class dataMap (number: Int, address: String, product: String, store: String, seller : String)
val messages = KafkaUtils.createDirectStream[ Int, String, String, String, String](ssc, kafkaParams, topics).map(m => m.as[dataMap])
当我使用上面的代码时,我收到以下错误:
error: type arguments [Int,String,String,String,String] conform to the bounds of none of the overloaded alternatives of value createDirectStream
P.S:我已经以正确的格式定义了kafkaParams和主题。
答案 0 :(得分:1)
我相信你想要这样的东西:
val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder, dataMap](...)
请注意,这将消除您的错误,但您还有更多工作要做。所有这一切都是为了获得原始的JSON String
。然后,您必须将String
转换为case class
。老实说,这是一个单独的问题,与Apache Spark无关,甚至与Kafka无关。您可以在此处找到针对该问题的几种不同解决方案:How to read json data using scala from kafka topic in apache spark