Apache spark 未从spark streaming写入的拼花文件更新外部表格

Apache spark 未从spark streaming写入的拼花文件更新外部表格,apache-spark,hive,apache-spark-sql,parquet,Apache Spark,Hive,Apache Spark Sql,Parquet,我正在使用spark streaming使用SaveMode.Append将聚合输出作为拼花文件写入hdfs。我创建了一个外部表,如下所示: CREATE TABLE if not exists rolluptable USING org.apache.spark.sql.parquet OPTIONS ( path "hdfs:////" ); 我的印象是,在外部表的情况下,查询也应该从新添加的拼花地板文件中获取数据。但是,似乎新编写的文件没有被提取 每次删除并重新创建表都可以正常工作,

我正在使用spark streaming使用SaveMode.Append将聚合输出作为拼花文件写入hdfs。我创建了一个外部表,如下所示:

CREATE TABLE if not exists rolluptable
USING org.apache.spark.sql.parquet
OPTIONS (
  path "hdfs:////"
);
我的印象是,在外部表的情况下,查询也应该从新添加的拼花地板文件中获取数据。但是,似乎新编写的文件没有被提取

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


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

您正在使用spark读取这些表格吗? 如果是这样,spark会缓存拼花地板表元数据(因为模式发现可能很昂贵)

要克服此问题,您有两个选择:

  • 将配置
    spark.sql.parquet.cacheMetadata
    设置为
    false
  • 在查询之前刷新表:
    sqlContext.refreshttable(“我的表”)

  • 有关更多详细信息,请参见此处:

    @SambitTripathy..yes。您可以使用刷新表。是否可以将这样的数据写入hdfs位置?pr.writeStream.outputMode(“附加”).format(“拼花”)选项(“路径”hdfs://nnnt/apps/hive/warehouse/rea.db/sample_movcsvfin/选项(“/user/sa/sparkCheckpoint”).partitionBy(“年”).trigger(ProcessingTime(“5秒”)).start()我目前正在一个bash脚本中从beeline客户端运行refreshtable,这个脚本似乎正在运行。这似乎对我不起作用。spark.sqlContext().clearCache();spark.sqlContext().setConf(“spark.sql.parquet.cacheMetadata”,“false”);spark.conf().set(“spark.sql.parquet.cacheMetadata”,false);