失敗する可能性のある関数を使用してケースクラスのデータセットに解析する文字列のデータセットがあります(たとえば、解析しようとしたデータが使用できない場合)。そのため、関数は 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 のデータセットを適切に処理できるかどうかを知りたいですか?