在spark中读取avro容器文件

fykwrbwg  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(306)

我正在研究一个场景,需要从hdfs读取avro容器文件,并使用spark进行分析。
输入文件directory:hdfs用法:/user/learner/20151223/.lzo*
注意:输入的avro文件是lzo压缩的。

val df = sqlContext.read.avro("/user/learner/20151223/*.lzo");

当我运行上述命令时,它会抛出一个错误:

java.io.FileNotFoundException: No avro files present at file:/user/learner/20151223/*.lzo
at com.databricks.spark.avro.AvroRelation$$anonfun$11.apply(AvroRelation.scala:225)
at com.databricks.spark.avro.AvroRelation$$anonfun$11.apply(AvroRelation.scala:225)
at scala.Option.getOrElse(Option.scala:120)
at com.databricks.spark.avro.AvroRelation.newReader(AvroRelation.scala:225)

这是有意义的,因为read.avro()方法需要.avro扩展名文件作为输入。所以我提取输入.lzo文件并将其重命名为.avro。我能够正确读取avro文件中的数据。
有没有办法读取spark中lzo压缩的avro文件?
解决办法奏效了,但是!
我找到了解决这个问题的办法。我创建了一个shell Package 器,使用以下方法将.lzo解压为.avro文件格式:

hadoop fs -text <file_path>*.lzo | hadoop fs - put - <file_path>.avro

我成功地解压缩lzo文件,但问题是我有至少5000压缩格式的文件。解压缩和转换一个接一个需要近1个多小时来运行此作业。
有什么办法可以批量减压吗?
再次感谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题