【问题标题】:Creating PySpark data frame without any alterations in column names在不更改列名的情况下创建 PySpark 数据框
【发布时间】:2019-12-23 10:29:16
【问题描述】:

我正在使用SparkSQL 和下面的CTAS 命令创建表。

CREATE TABLE TBL2
STORED AS ORC 
LOCATION "dbfs:/loc"  
TBLPROPERTIES("orc.compress" = "SNAPPY")
AS
SELECT Col1
       , ColNext2
       , ColNext3
       , ... 
FROM TBL1  

之后,我正在使用下面的PySpark 代码读取位于新创建位置 (TBL2) 之上的文件。但是,下面的data frame 仅使用lowercase 中的所有列名创建。而预期结果在camel case 中,就像我在上面对CTAS 所做的那样。

df = spark.read.format('ORC') \
     .option('inferSchema',True) \
     .option('header',True) \
     .load('dbfs:/loc')

data_frame.show()

实际输出:

col1 colnext2 colnext3 ...

预期输出:

Col1 ColNext2 ColNext2 ...

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql databricks


    【解决方案1】:

    在 2.3 及更早版本中,当从 Parquet 数据源表中读取时,无论 spark.sql.caseSensitive 是否设置为对或错。从 2.4 开始,当 spark.sql.caseSensitive 设置为 false 时,Spark 会在 Hive Metastore schema 和 Parquet schema 之间进行不区分大小写的列名解析,因此即使列名的字母大小写不同,Spark 也会返回相应的列值。如果存在歧义,即匹配多个 Parquet 列,则会引发异常。当 spark.sql.hive.convertMetastoreParquet 设置为 true 时,此更改也适用于 Parquet Hive 表。 source

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 1970-01-01
      • 2018-06-04
      • 2016-12-03
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2020-11-22
      相关资源
      最近更新 更多