apache-spark – 使用sqlContext映射[String,String]的JSON Struct

我试图在火花流媒体工作中读取json数据.

默认情况下,sqlContext.read.json(rdd)将所有地图类型转换为结构类型.

|-- legal_name: struct (nullable = true)
 |    |-- first_name: string (nullable = true)
 |    |-- last_name: string (nullable = true)
 |    |-- middle_name: string (nullable = true)

但是当我使用sqlContext从hive表中读取时

val a = sqlContext.sql(“select * from student_record”)

下面是架构.

|-- leagalname: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)

有没有什么办法可以使用read.json(rdd)读取数据并获取Map数据类型.

有什么选择吗
 spark.sql.schema.convertStructToMap

任何帮助表示赞赏.

最佳答案 调用read.json时,需要显式定义模式.

您可以在Spark SQL文档中阅读Programmatically specifying the schema中的详细信息.

例如,在您的具体情况下,它将是

import org.apache.spark.sql.types._
val schema = StructType(List(StructField("legal_name",MapType(StringType,StringType,true))))

这将是一列legal_name是地图.

定义了架构后,您可以调用
sqlContext.read.json(rdd,schema)从您的JSON数据集创建具有所需模式的数据框.

点赞