ホームページ >データベース >mysql チュートリアル >Apache Spark 結合に Null 値を含める方法は?

Apache Spark 結合に Null 値を含める方法は?

DDD
DDDオリジナル
2024-12-27 06:53:22138ブラウズ

How to Include Null Values in Apache Spark Joins?

Apache Spark 結合に Null 値を含める

Apache Spark のデフォルトの結合動作では、Null 値を持つ行が除外されるため、そのような価値観の維持。この記事では、Apache Spark の結合操作に null 値を含める方法を説明することで、この問題に対処します。

デフォルトの Spark の動作

デフォルトでは、Spark は内部結合を実行します。結合条件に関係するいずれかの列で NULL 値を持つ行を削除します。これを説明するために、次の例を考えてみましょう。

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"))

joinedDf.show() の出力は次のようになります。

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

予想通り、行には null 値が含まれています。 numbersDf の「numbers」列は結合結果から除外されます。

Null を含むValues

Spark は、null セーフな等価演算子を通じてこの問題の解決策を提供します。次のコードを使用すると、結合操作に null 値を含めることができます:

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

この変更された結合操作の結果、次の出力が生成され、以前に除外された null 値の行が含まれるようになります:

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

この null セーフな等価演算子は、コストのかかるデカルト演算が必要なため、1.6 より前の Spark バージョンでは慎重に使用する必要があることに注意することが重要です。 product.

Spark 2.3.0 以降

Spark 2.3.0 以降では、PySpark で Column.eqNullSafe メソッドを使用できますが、%=< ;=>% 演算子を SparkR で使用すると、同じ結果が得られます。さらに、Spark 2.2.0 では SQL 構文 IS NOT DISTINCT FROM を DataFrame API とともに使用して、結合操作に null 値を含めることができます。

以上がApache Spark 結合に Null 値を含める方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。