我正在使用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正确计数。
1条答案
按热度按时间vc9ivgsu1#
用于外部表的ddl中有错误。“skip.header.line.count“=“1”在ddl中,我们有100个输出文件。因此,每个文件跳过1行,这导致在spark正确计算时,hive中的原始计数为-100。删除了“skip.header.line.count”=“1”和它的给定计数。