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

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

Patricia Arquette
發布: 2025-01-01 10:33:12
原創
526 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板