Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 通过spark执行配置单元查询时返回错误答案_Apache Spark_Apache Spark Sql_Spark Dataframe_Hiveql - Fatal编程技术网

Apache spark 通过spark执行配置单元查询时返回错误答案

Apache spark 通过spark执行配置单元查询时返回错误答案,apache-spark,apache-spark-sql,spark-dataframe,hiveql,Apache Spark,Apache Spark Sql,Spark Dataframe,Hiveql,有人愿意冒险猜测一下为什么在Hive和Spark的dataframe API中执行的查询会返回不同的结果(顺便说一下,Hive返回的答案是正确的) 蜂巢: gb-slo-svb-0019:10000>从sseft.feat\u promo\u prod\u store\u period中选择count(*); 信息->从sseft.feat\u promo\u prod\u store\u period中选择计数(*) _c0 84071294 火花: sqlContext.sql('se

有人愿意冒险猜测一下为什么在Hive和Spark的dataframe API中执行的查询会返回不同的结果(顺便说一下,Hive返回的答案是正确的)
蜂巢:

gb-slo-svb-0019:10000>从sseft.feat\u promo\u prod\u store\u period中选择count(*);
信息->从sseft.feat\u promo\u prod\u store\u period中选择计数(*)
_c0
84071294

火花:

sqlContext.sql('select count(*)from sseft.feat\u promo\u prod\u store\u period').show()
+---+
|_c0|
+---+
|  0|
+---+

有趣的是,如果我使用spark而不是hive表指向底层hdfs位置,我会得到正确的答案:

sqlContext.read.parquet('/Lev4/sse/hive/sseft/feat\u promo\u prod\u store\u period').count()
84071294

此图描述了这三种情况:


检查您的hive-site.xml,它应该复制到spark conf目录,并且应该具有以下配置

<configuration>
  <property>
  <name>hive.metastore.uris</name>
  <value>thrift://host.xxx.com:9083</value>
  </property>
</configuration>

hive.metastore.uris
thrift://host.xxx.com:9083

确定该行为原因的最简单方法是查看
explain()
结果。比较这些:

sqlContext.sql('select * from sseft.feat_promo_prod_store_period').explain()
sqlContext.read.parquet('/Lev4/sse/hive/sseft/feat_promo_prod_store_period').explain()

如果它们不相同,您应该查看表是如何创建的,例如
sqlConext.sql('show create table sseft.feat\u promo\u prod\u store\u period')。first()

这似乎是引发表缓存的元数据的一个问题-该理论基于这样一个事实:删除表并重新创建它解决了问题。不幸的是,我无法重现这个问题,如果我提出了一个修复方案,我会尽量记得回到这里并报告它。