Apache Spark tidak menyertakan baris dengan nilai null secara lalai semasa gabungan. Ini boleh menyebabkan masalah apabila anda ingin mengekalkan semua data, termasuk nulls. Artikel ini meneroka penyelesaian kepada masalah ini.
Apabila anda melakukan gabungan pada dua DataFrames, Spark akan mengecualikan baris dengan nilai nol. Sebagai contoh, pertimbangkan DataFrames berikut:
val numbersDf = Seq( ("123"), ("456"), (null), ("") ).toDF("numbers") val lettersDf = Seq( ("123", "abc"), ("456", "def"), (null, "zzz"), ("", "hhh") ).toDF("numbers", "letters")
Jika kami melakukan gabungan pada DataFrames ini, kami akan mendapat output berikut:
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | | hhh| +-------+-------+
Seperti yang anda lihat, baris dengan null dalam lajur nombor telah dikecualikan daripada keputusan.
Spark menyediakan istimewa pengendali kesaksamaan null-safe untuk pengendalian cantuman dengan nilai nol:
numbersDf .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers")) .drop(lettersDf("numbers"))
Pengendali ini akan kembali benar jika kedua-dua operan adalah batal atau jika ia sama. Menggunakan operator ini, kita boleh mendapatkan output yang diingini:
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | null| zzz| | | hhh| +-------+-------+
Spark 2.3.0 :
Spark Terdahulu Versi:
Sebelum Spark 1.6, sambungan selamat-null memerlukan produk Cartesian.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai Null Semasa Apache Spark Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!