小编dun*_*98k的帖子

指定分区时,Spark SQL saveAsTable与Hive不兼容

一种边缘情况,在Spark SQL中使用分区保存镶木桌时,

#schema definitioin
final StructType schema = DataTypes.createStructType(Arrays.asList(
    DataTypes.createStructField("time", DataTypes.StringType, true),
    DataTypes.createStructField("accountId", DataTypes.StringType, true),
    ...

DataFrame df = hiveContext.read().schema(schema).json(stringJavaRDD);

df.coalesce(1)
    .write()
    .mode(SaveMode.Append)
    .format("parquet")
    .partitionBy("year")
    .saveAsTable("tblclick8partitioned");
Run Code Online (Sandbox Code Playgroud)

Spark警告:

将分区数据源关系保存为Spark SQL特定格式的Hive Metastore,与Hive不兼容

在Hive中:

hive> describe tblclick8partitioned;
OK
col                     array<string>           from deserializer
Time taken: 0.04 seconds, Fetched: 1 row(s)
Run Code Online (Sandbox Code Playgroud)

显然模式不正确 - 但是如果我saveAsTable在没有分区的Spark SQL中使用,则可以毫无问题地查询表.

问题是如何在Spark SQL中使用分区信息与Hive兼容的镶木桌?

hive partitioning parquet apache-spark-sql

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

apache-spark-sql ×1

hive ×1

parquet ×1

partitioning ×1