我正在尝试在火花流媒体作业中读取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
感谢任何帮助。
答案 0 :(得分:1)
调用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数据集创建数据框。