問題
執行內部聯接,但結果聯接表缺少數據。
例如,假設您有兩個表,訂單而且模型.
%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