Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memasukkan Nilai Null dalam Apache Spark Joins?

Bagaimana untuk Memasukkan Nilai Null dalam Apache Spark Joins?

DDD
DDDasal
2024-12-27 06:53:22134semak imbas

How to Include Null Values in Apache Spark Joins?

Termasuk Nilai Null dalam Apache Spark Join

Gelagat gabungan lalai Apache Spark mengecualikan baris dengan nilai nol, memberikan cabaran untuk pengguna yang memerlukan pemeliharaan nilai-nilai tersebut. Artikel ini menangani isu ini dengan menerangkan cara memasukkan nilai nol dalam operasi gabungan Apache Spark.

Gelagat Percikan Lalai

Secara lalai, Spark melakukan cantuman dalaman, yang menghapuskan baris dengan nilai nol dalam mana-mana lajur yang terlibat dalam keadaan gabungan. Untuk menggambarkan ini, pertimbangkan contoh berikut:

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

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

val joinedDf = numbersDf.join(lettersDf, Seq("numbers"))

Output joinedDf.show() adalah seperti berikut:

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

Seperti yang dijangkakan, baris dengan nilai nol dalam lajur "nombor" nomborDf dikecualikan daripada hasil gabungan.

Termasuk Null Values

Spark menyediakan penyelesaian kepada isu ini melalui pengendali kesaksamaan null-safe. Dengan menggunakan kod berikut, nilai nol boleh disertakan dalam operasi cantum:

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

Operasi cantum yang diubah suai ini menghasilkan output berikut, yang kini termasuk baris yang dikecualikan sebelum ini dengan nilai nol:

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

Adalah penting untuk ambil perhatian bahawa pengendali kesaksamaan null-safe ini harus digunakan dengan berhati-hati dalam versi Spark sebelum 1.6, kerana ia memerlukan kos yang mahal Produk Cartesian.

Spark 2.3.0 dan Kemudian

Dalam Spark 2.3.0 dan lebih baru, kaedah Column.eqNullSafe boleh digunakan dalam PySpark, manakala %= <=>% operator boleh digunakan dalam SparkR untuk mencapai hasil yang sama. Selain itu, sintaks SQL IS NOT DISTINCT FROM boleh digunakan dalam Spark 2.2.0 bersama-sama dengan API DataFrame untuk memasukkan nilai nol dalam operasi gabungan.

Atas ialah kandungan terperinci Bagaimana untuk Memasukkan Nilai Null dalam Apache Spark Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn