从文件中读取行,应用正则是parquet文件scala spark



嗨,我有一个具有日志事件的日志文件。我需要读取行并应用正则以使元素从行中获取并写入papquet文件。我有一个具有列定义的AVRO模式。

可能有人指导我一个继续。

val spark = SparkSession
  .builder()
  .appName("SparkApp")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()
val rdd = sc.textFile(args(0))
val schemaString = args(1)
val pattern = new Regex(args(2))
val fields = schemaString.split(" ")
  .map(fieldName => StructField(fieldName, StringType, nullable = true))
val schema = StructType(fields)
val matches = rdd.map { x => pattern.findFirstMatchIn(x) }.map{ x => x.map{x => x.subgroups}}
val values = matches.map { x => x.map { x => Row(x.toArray) }}

在值中,我得到了RDD[Option[Row]]。对此的任何建议。

您正在获取RDD[Option[Row]],因为您确实是regex.following是findFirstMatchIn的定义,它返回Option

def findFirstMatchIn(source: CharSequence): Option[Match] 

避免此

val matches = rdd.map { x => pattern.findFirstMatchIn(x) }.map { x => x.map { x => x.subgroups }.get }
val values = matches.map { x => x.map { x => Row(x.toArray) } }

结果

RDD[List[Row]]

要防御,您可以想到getOrElse而不是get

如果只需要RDD[Row]

,也可以想到flatmap

最新更新