Apache Spark 2.1.1如何将hive.serialization.extend.nesting.levels属性设置为true

时间:2017-07-06 00:50:31

标签: json apache-spark apache-spark-sql

我正在尝试对来自我的JSON数据的嵌套数据执行一些查询,但是spark抱怨我的数据(8)超过了LazySimpleSerde(7)支持的嵌套级别。我无法弄清楚如何将hive.serialization.extend.nesting.levels属性设置为true。

Spark Log:

  

org.apache.hadoop.hive.serde2.SerDeException LazySimpleSerde支持的嵌套级别数为7无法使用级别8.对于使用LazySimpleSerde的表,请使用hive.serialization.extend.nesting.levels serde属性。

2 个答案:

答案 0 :(得分:1)

在尝试创建表时,在Spark 2.3.0中遇到了相同的问题。我通读了火花代码并找到了答案。在创建表语句的末尾添加以下内容

TBLPROPERTIES('hive.serialization.extend.nesting.levels'='true')

答案 1 :(得分:0)

我看到你可以在火花中尝试的3种可能性:

用于新的SparkSession:

val sparkSession =
  SparkSession.builder
    .master("local[*]")
    .appName("MyApp")
    .config("set hive.serialization.extend.nesting.levels","true")
    .getOrCreate()

对于现有的SparkSession:

sparkSession.sql("set hive.serialization.extend.nesting.levels = true")

sparkSession.conf.set("set hive.serialization.extend.nesting.levels","true")

但我不确定这是否适用于这个特定属性,但我经常设置,例如hive.exec.dynamic.partition.mode在运行时使用上述方法