我们最近将我们的服务器从CDH5升级到CDH6。当在拼花表中使用SPARK将数据插入TIMESTAMP列时,插入数据的方式会有所不同。
CDH5:
HIVE:
如果我们将2019-01-30
插入拼花表的TIMESTAMP列并从Hive值中选择数据为'2019-01-30 00:00:00 0'
CDH6:
HIVE:
如果我们将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数据的约定是可配置的。
这是由属性lark. sql.parque.write eLegacyFormat
决定的。默认值为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)