我试图在火花流媒体工作中读取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数据集创建具有所需模式的数据框.