对于2.0之前的版本,我可以使用SQLContext来执行相同的操作:
val sqlContext = new SQLContext(sc)
val stream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](
ssc, kafkaParams, Set("myTopicName"))
stream.foreachRDD(
rdd => {
val dataFrame = sqlContext.read.json(rdd.map(_._2)) //converts json to DF
//do your operations on this DF. You won't even require a model class.
})
但是对于最新版本,SQLContext似乎已被弃用。那么,如何在不指定架构的情况下从JSON String RDD创建DF?我可以使用带有case class
或StructType
对象的模式找到转换的示例,但我可以看到动态创建DF的唯一选项是使用SparkSession
的隐式反射似乎也运作良好。 Spark团队是否支持无模式JSON字符串到DataFrame?
谢谢!
答案 0 :(得分:0)
对于最新版本,SQLContext似乎已被弃用。
您可以使用SQLContext
完成SparkSession
所做的一切,只需将其作为替代品使用。
val spark = SparkSession.builder.getOrCreate()
import spark.implicits._
stream.foreachRDD(
rdd => {
val dataFrame = spark.read.json(rdd.map(_._2).toDS)
})