【问题标题】:Apache Spark 2.1.1 how to set hive.serialization.extend.nesting.levels property to trueApache Spark 2.1.1 如何将 hive.serialization.extend.nesting.levels 属性设置为 true
【发布时间】:2018-07-20 07:44:30
【问题描述】:

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

火花日志:

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

【问题讨论】:

  • 你试过通过 spark 设置吗? sparkSession.sql("set hive.serialization.extend.nesting.levels = true")
  • @RaphaelRoth 我试过了,但它不起作用,因为我仍然遇到同样的错误。我想知道您需要专门为使用 LazySimpleSerde 的表设置它吗?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我看到了您可以在 spark 中尝试的 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 在运行时使用上述方法

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2019-11-21
      相关资源
      最近更新 更多