在Spark中阅读Avro容器文件

时间:2016-01-10 17:15:28

标签: scala hadoop apache-spark hadoop-lzo

我正在开发一个场景,我需要从HDFS读取Avro容器文件并使用Spark进行分析。

  

输入文件目录: 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包装器,我使用以下方法将.lzo解压缩成.avro文件格式:

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

我成功解压缩lzo文件,但问题是我至少有5000个压缩格式的文件。解压缩和逐个转换需要将近1个多小时才能运行此作业。

有没有办法以批量方式进行减压?

再次感谢!

0 个答案:

没有答案