繁体   English   中英

数据帧列scala中的火花流JSON值

[英]spark streaming JSON value in dataframe column scala

我有一个带有 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()

仍然没有希望.. 请帮助..

您可以将数据加载为 textFile,为 person 创建 case 类并使用 json4s 或 gson 将每个 json 字符串解析为 Person 实例,然后按如下方式创建 Dataframe:

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 类:
https://commitlogs.com/2017/01/14/serialize-deserialize-json-with-json4s-in-scala/

使用 gson 将 json 反序列化为 case 类:
https://alvinalexander.com/source-code/scala/scala-case-class-gson-json-object-deserialization-and-scalatra

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM