內部連接刪除結果中的記錄

在執行內部連接時避免丟棄記錄。

寫的siddharth.panchal

最後發布時間:2022年5月23日

問題

執行內部聯接,但結果聯接表缺少數據。

例如,假設您有兩個表,訂單而且模型

%python df_orders = spark。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("Orders") df_models.createOrReplaceTempView("Models") SQL複製到clipboardCopy SELECT * MAGIC FROM Orders a MAGIC INNER JOIN Models b MAGIC ON a. company = b. company MAGIC AND a. model = b. model MAGIC AND a. info = b. info

生成的連接表隻包含四個記錄中的三個訂單表格有一個記錄列中的值不會出現在結果中。

默認內部連接的結果。空值被刪除。

導致

Apache Spark不考慮值。

如果您嚐試連接表,並且某些列包含值,記錄將不包含在結果連接表中。

解決方案

如果源表包含值,你應該使用Spark安全操作符(< = >).

當你使用< = >引發過程值(而不是刪除它們)。

例如,如果我們用< = >時,生成的表不會刪除值。

a. company = b. company MAGIC AND a. model = b. model MAGIC AND a. info <=> b. info

空安全內部連接的結果。空值可見。

例如筆記本電腦

檢查內部連接刪除空值示例筆記本