我正在尝试读取火花流作业中的 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)
读取数据并获取地图数据类型?
有没有这样的选择 spark.sql.schema.convertStructToMap
?
任何帮助,不胜感激。
调用 read.json
时,您需要显式定义架构。
可以在 Spark SQL 文档中以编程方式指定架构中阅读详细信息。
例如,在您的特定情况下,它将是
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 数据集创建数据框。