我正在尝试对来自我的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属性。
答案 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
在运行时使用上述方法