Apache Spark は、結合中にデフォルトで Null 値を持つ行を組み込みません。これにより、null を含むすべてのデータを保持したい場合に問題が発生する可能性があります。この記事では、この問題の解決策について説明します。
2 つの 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 は特別な機能を提供しますnull 値による結合を処理するための null セーフな等価演算子:
numbersDf .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers")) .drop(lettersDf("numbers"))
この演算子は、両方のオペランドが null であるか、等しい場合に true を返します。この演算子を使用すると、目的の出力を取得できます:
+-------+-------+ |numbers|letters| +-------+-------+ | 123| abc| | 456| def| | null| zzz| | | hhh| +-------+-------+
Spark 2.3.0 :
初期のスパークバージョン:
Spark 1.6 より前では、null セーフな結合にはデカルト積が必要でした。
以上がApache Spark の参加中に Null 値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。