首页 > 解决方案 > TIMESTAMP 列问题 CDH5 与镶木地板表中的 CDH6

问题描述

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

光盘 5:

HIVE:
如果我们插入2019-01-30到 parquet 表的 TIMESTAMP 列并从 Hive 值中选择数据是'2019-01-30 00:00:00 0'

光盘 6:

HIVE:
如果我们插入2019-01-30parquet 表的 TIMESTAMP 列并从 HIVE 值中选择数据是'2019-01-30 04:00:00'

IMPALA:
如果我们插入2019-01-30parquet 表的 TIMESTAMP 列并从 IMPALA 值中选择数据,则值为 '2019-01-30 04:00:00'

如果有任何我们可以使用的火花属性,请告诉我。我的主要目标是匹配 CDH5 与 CDH6 中的 HIVE 值,如果可能的话,当我们从 IMPALA 中选择时,如果应该是2019-01-30 00:00:00'

标签: apache-sparkhadoophiveimpala

解决方案


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

这是由属性决定的spark.sql.parquet.writeLegacyFormat。默认值为false。如果设置为trueSpark将使用与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)

推荐阅读