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

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

DDD
リリース: 2024-12-27 06:53:22
オリジナル
201 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート