所有scala noob问题
我使用下面的代码来匹配regex到文件的第一行以识别文件类型-基本上,它匹配直到一个工作-我们无法控制文件名t/f am使用regex
然而,对于avro文件,第一行以“Obj(ctl-a)(ctl-f)(ctl-v)avro.schema”开始.....但是下面注解的(!!!)正则表达式无法匹配,所以我使用通用的“.”匹配来使其工作,但不明白为什么会失败
我还包括od -cxa输出的文件与ctl字符在偏移3,4,5从位置0
感谢您的任何意见,感谢您在这方面的时间,先生
val stream:FSDataInputStream = fs.open(filePath)
val bufferReader = new BufferedReader(new InputStreamReader(stream))
var lineTxt1:String = bufferReader.readLine()
var lineTxt2:String = bufferReader.readLine()
logger.info(lineTxt1)
//!!! doesn't work: val pattern_avro = "^Obj#010616avro.schema".r.unanchored
val pattern_avro = "^Obj...avro.schema".r.unanchored
val pattern_orc = "^ORC".r.unanchored
val pattern_parquet = "^PAR".r.unanchored
lineTxt1 match {
case pattern_avro() => "AVRO"
case pattern_orc() => "ORC"
case pattern_parquet() => "PAR"
case _ => "TEXT"
}
对于示例avro文件,$(od -cxa)输出:
0000000 O b j soh ack syn a v r o . s c h e m
O b j 001 006 026 a v r o . s c h e m
624f 016a 1606 7661 6f72 732e 6863 6d65
0000020 a , enq { " t y p e " : " r e c o
a 254 005 { " t y p e " : " r e c o
1条答案
按热度按时间h9a6wy2h1#
我不知道
#010616
是什么,但下面的正则表达式应该可以工作: