簡體   English   中英

rdd.count的結果,通過spark sql進行計數是相同的,但它們與配置單元sql的計數不同

[英]Results of rdd.count, count via spark sql are the same, but they are different from count with hive sql

我用count來計算RDD的數量,得到13673153,但是將rdd轉移到df並插入到蜂巢之后,再次計數,得到13673182,為什么?

  1. rdd.count
  2. spark.sql(“從...中選擇count(*)”)。show()
  3. 蜂巢SQL:從...選擇計數(*)

這可能是由於基礎文件中的數據與為該表配置的蜂巢中的元數據不匹配所致。 嘗試運行:

MSCK REPAIR TABLE tablename;

在配置單元中,看看問題是否已解決。 該命令更新表的分區信息。 您可以在此處的文檔中找到更多信息。

在Spark Action和SparkContext的一部分期間,Spark將記錄哪些文件在處理范圍之內。 因此,如果DAG需要恢復並重新處理該Action,則將獲得相同的結果。 通過設計。

Hive QL沒有此類考慮。

更新

如您所述,其他答案在此用例中無濟於事。

因此,當Spark處理Hive表時,它將查看將用於Action的文件列表。

如果發生故障(節點故障等),它將從生成的DAG重新計算數據。 如果需要返回並重新計算,直到從Hive本身開始讀取,它就會知道要使用的文件-即相同的文件,從而獲得相同的結果,而不是不確定的結果。 例如,考慮分區方面,可以方便地重新計算出相同的結果!

就這么簡單。 這是設計使然。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM