我使用spark流将聚合输出作为镶木地板文件使用SaveMode.Append写入hdfs。我创建了一个外部表,如:
CREATE TABLE if not exists rolluptable
USING org.apache.spark.sql.parquet
OPTIONS (
path "hdfs:////"
);
我的印象是,在外部表的情况下,查询也应该从新添加的镶木地板文件中获取数据。但是,新编写的文件似乎没有被拿起。
每次删除并重新创建表都很好,但不是一个解决方案。
请建议我的表如何也能从较新的文件中获得数据。
你在读那些表格吗?如果是这样,spark缓存镶木地板表元数据(因为模式发现可能很昂贵)
为了克服这个问题,你有两个选择:
- 将配置
spark.sql.parquet.cacheMetadata
设置为false
- 查询前刷新表:
sqlContext.refreshTable("my_table")
请参阅此处了解更多详细信息:http://spark.apache.org/docs/latest/sql-programming-guide.html#hive-metastore镶木地板桌子转换