2

Spark 版本:Amazon EMR 5.24.0 上的 2.4.2

我有一个由 S3 Parquet 目录支持的 Glue 目录表。Parquet 文件具有区分大小写的列名(如lastModified)。不管我做什么,lastmodified在使用 Spark 读取 Glue Catalog 表时,我会得到小写的列名 ( ):

for {
  i <- Seq(false, true)
  j <- Seq("NEVER_INFER", "INFER_AND_SAVE", "INFER_ONLY")
  k <- Seq(false, true)
} {
  val spark = SparkSession.builder()
    .config("spark.sql.hive.convertMetastoreParquet", i)
    .config("spark.sql.hive.caseSensitiveInferenceMode", j)
    .config("spark.sql.parquet.mergeSchema", k)
    .enableHiveSupport()
    .getOrCreate()

  import spark.sql

  val df = sql("""SELECT * FROM ecs_db.test_small""")
  df.columns.foreach(println)
}

[1] https://medium.com/@an_chee/why-using-mixed-case-field-names-in-hive-spark-sql-is-a-bad-idea-95da8b6ec1e0
[2] https:// spark.apache.org/docs/latest/sql-data-sources-parquet.html

4

1 回答 1

2
于 2020-01-17T12:33:13.827 回答