外部表未从火花流写入的镶木地板文件更新

Abh*_*and 4 hive apache-spark parquet apache-spark-sql

我正在使用 Spark 流将聚合输出作为镶木地板文件写入使用 SaveMode.Append 的 hdfs。我创建了一个外部表,如:

CREATE TABLE if not exists rolluptable
USING org.apache.spark.sql.parquet
OPTIONS (
  path "hdfs:////"
);
Run Code Online (Sandbox Code Playgroud)

我的印象是,在外部表的情况下,查询也应该从新添加的镶木地板文件中获取数据。但是,似乎新写入的文件没有被提取。

每次删除并重新创建表都可以正常工作,但不是解决方案。

请建议我的表如何也有来自较新文件的数据。

lev*_*lev 5

你在用火花读那些表吗?如果是这样,火花缓存拼花表元数据(因为模式发现可能很昂贵)

为了克服这个问题,您有 2 个选择:

  1. 将配置设置spark.sql.parquet.cacheMetadatafalse
  2. 查询前刷新表: sqlContext.refreshTable("my_table")

有关更多详细信息,请参见此处:http : //spark.apache.org/docs/latest/sql-programming-guide.html#hive-metastore-parquet-table-conversion