Spark HiveContext不会从Hive Table中检索新插入的记录

时间:2015-07-21 15:03:57

标签: apache-spark-sql

我正在使用Spark 1.4。 HiveContext用于连接Hive。我做了以下

val hx = new HiveContext(sc)
import hx.implicits._
hx.sql("select * from tab").show

//没关系,结果显示为预期

然后,我从 beeline console

中将一些记录插入到标签中
hx.refreshTable("tab")
hx.sql("select * from tab").show

//仍然是旧记录,没有新插入的记录

我的问题是:为什么HiveContext没有检索新插入的记录?

3 个答案:

答案 0 :(得分:2)

hiveContext。 refreshTable (tableName:String) - 此将仅刷新表格的元数据(不是实际数据)

官方文件中的注释:(信用:https://spark.apache.org

refreshTable(tableName:String):单位

使所有缓存的给定表的元数据无效并刷新。出于性能原因,Spark SQL或其使用的外部数据源库可能会缓存有关表的某些元数据,例如块的位置。当这些更改在Spark SQL之外时,用户应调用此函数使缓存无效

要检索新插入的记录: - 首先使用 uncacheTable(String tableName) cacheTable(String tableName) <,然后再次缓存/ p>

答案 1 :(得分:0)

如果目标表已分区,则需要插入&#39;分区&#39;选项。如果您错过了分区,数据将不可见。

angular.module('cardList', []).controller('CardController', function($scope, $http) {
  $http.get("Controllers/CardController/AllCardsList").then(function(response){ 
    $scope.names = response.data;
  });
});

答案 2 :(得分:-1)

在一个不同的情况下,我通过RDD来自Spark SQL语句HiveContext。经过一些实验后,对我有用的解决方案是实际重新生成RDD本身。

无论您是使用Spark SQL的DDL还是直接通过hiveContext.sql发送SQL语句,都无关紧要。

我已经看到人们使用“计数技巧”来强制重新计算数据集,但至少在我的尝试中我无法以这种方式看到新数据。

无论如何尝试缓存,刷新和朋友对我不起作用,如果有人在这里有一些正确的模式请分享。