使用sqlContext

时间:2017-01-25 19:58:42

标签: apache-spark apache-spark-sql

我正在尝试在火花流媒体作业中读取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

感谢任何帮助。

1 个答案:

答案 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数据集创建数据框。