繁体   English   中英

从文件读取行应用正则表达式并写入镶木地板文件scala spark

[英]Read line from file apply regex and write to parquet file scala spark

嗨,我有一个包含日志事件的日志文件。 我需要读取行并应用正则表达式以从行中获取元素并写入镶木地板文件。 我有一个具有列定义的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]]因为您进行了正则表达式。以下是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 ,您可以考虑使用getOrElse而不是get

如果只需要RDD[Row]也可以考虑flatmap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM