問題
你執行內連接,但是結果加入表丟失數據。
例如,假設您有兩個表,訂單和模型。
% python df_orders =火花。createDataFrame(((“日產”,Altima,雙門車2.5年代車),(“日產”,Altima, 4-door 3.5 SE轎車),(“日產”,Altima,”)(“日產”,Altima, None)],[“公司”,“模型”,“信息”)
% python df_models = spark.createDataFrame(((“日產”,Altima,”)(“日產”,Altima,雙門車2.5年代車),(“日產”,Altima,雙門車3.5 SE轎車),(“日產”,Altima, 4-door 2.5年代轎車),(“日產”,Altima, 4-door 3.5 SE轎車),(“日產”,Altima, 4-door 3.5 SL轎車),(“日產”,Altima, 4-door混合動力轎車),(“日產”,Altima, None)],[“公司”,“模型”,“信息”)
你嚐試直接連接兩個表。
% python df_orders.createOrReplaceTempView(“訂單”)df_models.createOrReplaceTempView(“模型”)SQL複製到clipboardCopy SELECT *魔法從訂單一個魔法內連接模型b魔法上。公司= b。魔法和一個公司。模型= b。魔法和一個模型。信息= b.Info
結果加入表隻包括三四個記錄的訂單表。的記錄零值一列沒有出現在結果中。
導致
Apache火花不考慮零當執行連結操作值。
如果你試圖加入表和一些列包含零值,零記錄將不被包括在結果加入表。
解決方案
如果你的源表零值,您應該使用火花零安全操作符(< = >)。
當你使用< = >引發過程零值(而不是把他們)在執行連接。
例如,如果我們修改示例代碼< = >,由此產生的表不下降零值。
%的sql SELECT *魔法從訂單一個魔法內連接模型b魔法上。公司= b。魔法和一個公司。模型= b。魔法和一個模型。信息< = > b.Info