ホームページ > データベース > mysql チュートリアル > Apache Spark の参加中に Null 値を処理するにはどうすればよいですか?

Apache Spark の参加中に Null 値を処理するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-01 10:33:12
オリジナル
509 人が閲覧しました

How to Handle Null Values During Apache Spark Joins?

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

Apache Spark は、結合中にデフォルトで Null 値を持つ行を組み込みません。これにより、null を含むすべてのデータを保持したい場合に問題が発生する可能性があります。この記事では、この問題の解決策について説明します。

デフォルトの Spark 動作

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 :

  • PySpark: を使用するColumn.eqNullSafe
  • SparkR: %<=>% を使用
  • SQL: 使用は
と区別されません

初期のスパークバージョン:

Spark 1.6 より前では、null セーフな結合にはデカルト積が必要でした。

以上がApache Spark の参加中に Null 値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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