数据帧列scala中的spark streaming JSON值
我有一个带有json值的文本文件。这会被读入DF数据帧列scala中的spark streaming JSON值,json,scala,spark-streaming,Json,Scala,Spark Streaming,我有一个带有json值的文本文件。这会被读入DF {"name":"Michael"} {"name":"Andy", "age":30} 我想在流式传输时动态推断每一行的模式,并根据其模式将其存储在不同的位置(表) 不幸的是,当我尝试读取value.schema时,它仍然显示为字符串。由于流媒体中不允许使用RDD,请提供有关如何在流媒体上执行此操作的帮助 我想使用以下代码,但它不起作用,因为值仍然是以字符串格式读取的 val jsonSchema = newdf1.select("value
{"name":"Michael"}
{"name":"Andy", "age":30}
我想在流式传输时动态推断每一行的模式,并根据其模式将其存储在不同的位置(表)
不幸的是,当我尝试读取value.schema时,它仍然显示为字符串。由于流媒体中不允许使用RDD,请提供有关如何在流媒体上执行此操作的帮助
我想使用以下代码,但它不起作用,因为值仍然是以字符串格式读取的
val jsonSchema = newdf1.select("value").as[String].schema
val df1 = newdf1.select(from_json($"value", jsonSchema).alias("value_new"))
val df2 = df1.select("value_new.*")
我甚至试着用
schema_of_json("json_schema"))
val jsonSchema: String = newdf.select(schema_of_json(col("value".toString))).as[String].first()
还是没有希望。。请帮助..您可以将数据加载为文本文件,为person创建case类,并使用json4s或gson将每个json字符串解析为person实例,然后按如下方式创建数据框:
case class Person(name: String, age: Int)
val jsons = spark.read.textFile("/my/input")
val persons = jsons.map{json => toPerson(json) //instead of 'toPerson' actually parse with json4s or gson to return Person instance}
val df = sqlContext.createDataFrame(persons)
使用json4s将json反序列化到case类:使用gson将json反序列化到case类:
谢谢Ofek,但是如果我给case类或structtype,它就会变成一个静态模式。但我希望我的流媒体能够读取数据并自行生成动态模式。。