1

失敗する可能性のある関数を使用してケースクラスのデータセットに解析する文字列のデータセットがあります(たとえば、解析しようとしたデータが使用できない場合)。そのため、関数は Option (Scala) を返します。したがって、Option[MyCaseClass] のデータセットになります。

Spark はそのデータセットを受け入れて処理しているようですがNone、解析に失敗した場合に a を返す代わりに、 a を返しますSome(MyCaseClass(null, null...))

これを行うコードの例を次に示します。

recordsDs
  .map { record =>
    val maybeArticle = unmarshallArticle(record)
    if (maybeArticle.isEmpty) {
      println(s"Could not parse record $record into an article.")
    }
    maybeArticle
  }
  .filter(_.isDefined)
  .map(_.get)
  .collect().toList // Always returns a List(Some(Article(null, null), Some(Article...

そして、これがケースを説明するノートです

私の推測では、Option 値をシリアル化してから逆シリアル化するときに、Spark は、Option が Some か None かをチェックする代わりに、Some() コンストラクターを使用します。

のようなオブジェクトのラッパーを明らかに作成できますがMaybeArticle(article: Option[Article])、Spark が Options のデータセットを適切に処理できるかどうかを知りたいですか?

4

1 に答える 1