我正在使用hive和spark进行AWS集群开发。前一天,我在Hive的外部表上运行一些ETL pyspark脚本时遇到了一种奇怪的情况。
我们有一个控制表,其中有一个提取日期列。然后,我们根据提取日期从暂存表(配置单元中的托管表,但位置为s3存储桶)中筛选数据,并将其加载到目标表中,该目标表是数据位于s3存储桶中的外部表。我们正在加载如下表
spark.sql("INSERT OVERWRITE target_table select * from DF_made_from_stage_table")
现在,当我通过spark和直接配置单元CLI检查目标表的count(*)时,两者都给出不同的计数
火花:
spark.sql("select count(1) from target") -- giving 50K records
在配置单元中:
select count(1) from target -- giving a count 50k - 100
注意:外部表的统计信息出现了间歇性问题,它在蜂巢中的计数为-1。我们通过运行
解决了这一问题ANALYZE TABLE target COMPUTE STATISTICS
但是即使完成所有这些操作,我们仍然在蜂巢中获得了original_count-100,其中正确计数了火花。
答案 0 :(得分:0)
用于外部表的DDL中有一个错误。 DDL中存在“ skip.header.line.count” =“ 1”,我们有100个输出文件。因此,跳过了每个文件1行,这导致原始计数-蜂巢中为100,而spark正确地计算了它。现在已删除“ skip.header.line.count” =“ 1”及其提供的计数。