Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据帧列scala中的spark streaming JSON值_Json_Scala_Spark Streaming - Fatal编程技术网

数据帧列scala中的spark streaming JSON值

数据帧列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

我有一个带有json值的文本文件。这会被读入DF

{"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,它就会变成一个静态模式。但我希望我的流媒体能够读取数据并自行生成动态模式。。