首頁 >資料庫 >mysql教程 >如何在 Apache Spark 連線期間處理空值?

如何在 Apache Spark 連線期間處理空值?

Patricia Arquette
Patricia Arquette原創
2025-01-01 10:33:12530瀏覽

How to Handle Null Values During Apache Spark Joins?

如何在 Apache Spark 聯結中包含空值

Apache Spark 在聯結過程中預設不包含具有空值的行。當您想要保留所有資料(包括空值)時,這可能會導致問題。本文探討了此問題的解決方案。

預設 Spark 行為

當您對兩個 DataFrame 執行聯結時,Spark 將排除具有 null 值的行。例如,考慮以下DataFrame:

val numbersDf = Seq(
  ("123"),
  ("456"),
  (null),
  ("")
).toDF("numbers")

val lettersDf = Seq(
  ("123", "abc"),
  ("456", "def"),
  (null, "zzz"),
  ("", "hhh")
).toDF("numbers", "letters")

如果我們對這些DataFrame 執行聯接,我們將得到以下輸出:

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|       |    hhh|
+-------+-------+

如您所見,帶有數字列中的null已從結果中排除。

解決方案

Spark 提供了一個特殊的用於處理空值連接的空安全相等運算符:

numbersDf
  .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers"))
  .drop(lettersDf("numbers"))

如果兩個操作數都為空或相等,則此運算子將傳回true。使用此運算符,我們可以獲得所需的輸出:

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|   null|    zzz|
|       |    hhh|
+-------+-------+

其他選項

Spark 2.3.0 :

  • PySpark:使用Column.eqNullSafe
  • SparkR: 使用%%
  • SQL: 使用與

SQL: 使用與

不同

早期Spark版本:在 Spark 1.6 之前,空安全連線需要笛卡爾積。

以上是如何在 Apache Spark 連線期間處理空值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn