Spark版本2.0 Streaming:如何动态推断JSON String rdd的架构并将其转换为DF

时间:2018-02-06 17:34:13

标签: json scala apache-spark spark-dataframe rdd

对于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 classStructType对象的模式找到转换的示例,但我可以看到动态创建DF的唯一选项是使用SparkSession的隐式反射似乎也运作良好。 Spark团队是否支持无模式JSON字符串到DataFrame?

谢谢!

1 个答案:

答案 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) 
  })