私は非常にシンプルな(n00b)質問をしていますが、どういうわけか私は立ち往生しています。私はwholeTextFiles
で火花のファイルのセットを読み込み、RDD[LogEntry]
を返そうとしています。LogEntry
は単なるケースクラスです。私は有効なエントリのRDDで終わりたいと思うし、私は正規表現を使用して私のケースクラスのパラメータを抽出する必要があります。エントリが有効でないとき、私は抽出ロジックが失敗するのを望んでいませんが、ログにエントリを書き込むだけです。そのために私はLazyLoggingを使用します。パターンマッチングとRDD
object LogProcessors extends LazyLogging {
def extractLogs(sc: SparkContext, path: String, numPartitions: Int = 5): RDD[Option[CleaningLogEntry]] = {
val pattern = "<some pattern>".r
val logs = sc.wholeTextFiles(path, numPartitions)
val entries = logs.map(fileContent => {
val file = fileContent._1
val content = fileContent._2
content.split("\\r?\\n").map(line => line match {
case pattern(dt, ev, seq) => Some(LogEntry(<...>))
case _ => logger.error(s"Cannot parse $file: $line"); None
})
})
これは私にRDD[Array[Option[LogEntry]]]
を与えます。 LogEntry
のRDDで終わるすてきな方法はありますか?私は何とかそれを逃しています。
私は代わりにTry
を使用することを考えていましたが、それがより良いかどうかはわかりません。
非常に感謝しています。
をあなたはRDD [LongEntry] 'や'であることを最終 'RDD'の署名を探している' RDD [アレイ[ログ・エントリ]] 'または何か他の? –