【问题标题】:Loading JSON file with schema in spark is loading null data due to case sensitivity由于区分大小写,在 Spark 中加载带有模式的 JSON 文件正在加载空数据
【发布时间】:2020-04-22 00:35:34
【问题描述】:

我正在尝试使用 Schema 加载 JSON 文件,但是 schema 的列都是小写的,并且 JSON 文件中的键不是,所以加载的数据为 null。 我可以使用推断的架构加载文件,但这不是一个选项。 我也尝试过设置spark.sql.caseSensitive=true,但它不起作用,而是将它们添加为新列。 是否可以设置任何属性以使其工作,或者我必须在加载到 spark 之前预处理所有这些 JSON 文件。 JSON 可能缺少键值。 例如

{"id": "0001","type": "donut"} {"Id": "0002","Type": "Cakedonut"} {"ID": "0002"}

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    AFAIK 没有可以结合您的架构的隐式设置,将其视为 Spark 的一项功能,您可以使用下面的代码来实现您的目标。

    val spark = SparkSession.builder().master("local[*]").getOrCreate()
        spark.conf.set("spark.sql.caseSensitive","true")
        val df = spark.read.json("src/main/resources/test.json")
    
        val finalColumns = df.columns.groupBy(_.toLowerCase)
          .map(t => functions.coalesce(t._2.map(col):_*).as(t._1))
          .toArray
        df.select(finalColumns: _*).show()
    
    +---------+----+
    |     type|  id|
    +---------+----+
    |    donut|0001|
    |Cakedonut|0002|
    |     null|0002|
    +---------+----+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2021-09-05
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多