镶木地板表中的TIMESTAMP列CDH5与CDH6

问题描述

我们最近将服务器从CDH 5升级到CDH 6。在镶木表中使用SPARK将数据插入TIMESTAMP列时,数据的插入方式有所不同。

CDH 5:

蜂巢:
如果我们将2019-01-30插入到实木复合地板表的TIMESTAMP列中,然后从Hive中选择数据,则值为'2019-01-30 00:00:00 0'

CDH 6:

蜂巢:
如果我们将2019-01-30插入到实木复合地板表的TIMESTAMP列中,然后从HIVE中选择数据,则值为'2019-01-30 04:00:00'

IMPALA:
如果我们将2019-01-30插入实木复合地板表的TIMESTAMP列中,然后从IMPALA中选择数据,则值为'2019-01-30 04:00:00'

请让我知道是否可以使用任何火花特性。我的主要目标是匹配CDH5与CDH6中的HIVE值,如果可能,当我们从IMPALA中选择时,如果应该设为2019-01-30 00:00:00'

解决方法

跳过 Spark Hive 之间的数据类型问题, Spark 用于写入 Parquet 数据的约定是可配置的。

这由属性spark.sql.parquet.writeLegacyFormat确定。默认值为false。如果设置为true,则 Spark 将使用与 Hive 相同的约定来写入Parquet数据。

val spark = SparkSession
    .builder()
    .appName("MyApp")
    .master("local[*]")
    .config("spark.sql.shuffle.partitions","200") //Change to a more reasonable default number of partitions for our data
    .config("spark.sql.parquet.writeLegacyFormat",true)