同一外部表上的count(*)在spark.sql()和hive中给出了不同的值

rseugnpd  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(548)

我正在使用hive和spark开发aws集群。前一天我在配置单元的外部表上运行etl pyspark脚本时遇到了一个奇怪的情况。
我们有一个控制表,它有一个提取日期列。我们根据提取日期从暂存表(hive中的托管表,但位置是s3 bucket)中过滤数据,并加载到目标表,目标表是一个外部表,数据位于s3 bucket中。我们正在把table装到下面

spark.sql("INSERT OVERWRITE target_table select * from DF_made_from_stage_table")

现在,当我通过spark和directhivecli检查了目标表上的count(*)时,两个表都给出了不同的count
Spark中:

spark.sql("select count(1) from target") -- giving 50K records

在Hive中:

select count(1) from target -- giving a count 50k - 100

注意:外部表上的统计数据出现了一个间歇性问题,该表在配置单元中的计数为-1。我们已经通过运行解决了这个问题

ANALYZE TABLE target COMPUTE STATISTICS

但即使做了所有这些,我们仍然得到原始的\u计数-100在Hive在Spark正确计数。

vc9ivgsu

vc9ivgsu1#

用于外部表的ddl中有错误。“skip.header.line.count“=“1”在ddl中,我们有100个输出文件。因此,每个文件跳过1行,这导致在spark正确计算时,hive中的原始计数为-100。删除了“skip.header.line.count”=“1”和它的给定计数。

相关问题