【发布时间】:2017-01-07 11:01:18
【问题描述】:
一种边缘情况,在使用分区的 Spark SQL 中保存 parquet 表时,
#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");
火花警告:
将分区数据源关系持久化到 Hive 元存储中 Spark SQL 特定格式,与 Hive 不兼容
在蜂巢中:
hive> describe tblclick8partitioned;
OK
col array<string> from deserializer
Time taken: 0.04 seconds, Fetched: 1 row(s)
显然架构不正确 - 但是如果我在 Spark SQL 中使用 saveAsTable 而不进行分区,则可以毫无问题地查询表。
问题是如何使 Spark SQL 中的 parquet 表与带有分区信息的 Hive 兼容?
【问题讨论】:
-
数据存入hdfs,元数据存入hive metastore
-
您是否尝试“注册为临时表”然后运行 SQL 命令“CREATE TABLE”然后“INSERT ”?
-
谢谢 Samson,还没有,但 saveAsTable 不是在做它应该做的吗?
-
可能取决于您使用的 Spark 版本,例如“它不是错误,它是一个特性” vs. “总有一天会实现”
标签: hive apache-spark-sql partitioning parquet