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

Posted

技术标签:

【中文标题】TIMESTAMP 列问题 CDH5 与镶木地板表中的 CDH6【英文标题】:TIMESTAMP column issue CDH5 vs CDH6 in parquet table 【发布时间】:2020-08-21 00:18:41 【问题描述】:

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

CDH 5:

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

CDH 6:

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

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

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

【问题讨论】:

您能说出您当时使用的 Spark 版本和现在使用的 Spark 版本吗?此外,据我所知,parquet 以 UTC 存储时间戳,因此可能是表示层调整。 我们使用的是 Spark 2.3 版本 也许您会发现此信息很有用docs.cloudera.com/runtime/7.2.1/developing-spark-applications/…。顺便说一句,我相信CDH6中默认的Spark版本是2.4。 感谢您发送链接。那是或黑斑羚。我的主要问题是 HIVE 中的日期不匹配,不确定比较 CDH5 和 CDH6 时是否有任何设置 【参考方案1】:

要跳过 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)

【讨论】:

以上是关于TIMESTAMP 列问题 CDH5 与镶木地板表中的 CDH6的主要内容,如果未能解决你的问题,请参考以下文章

将分区(火花)镶木地板加载到 bigquery 表

如何从镶木地板文件创建表格

在 Spark 中保存镶木地板文件给出错误

#1293 - 表定义不正确;在 DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列

如何从 Amazon Athena 查询镶木地板数据?

创建表列时如何正确使用 ON UPDATE CURRENT_TIMESTAMP?