我有一个Avro数据文件,我需要将其转换为CSV文件。 Avro Totext工具当前不支持使用自定义架构。有没有工具可以做到这一点?我是否只需要使用Avro工具对其进行编码?
我问了同样的问题,我只是使用Spark API完成此任务:
将数据读取为:
val sqlContext = new SQLContext(sc)
val avro = sqlContext.read.format("com.databricks.spark.avro").load("/path/to/your/data")
或
val sqlContext = new SQLContext(sc)
val avro = sqlContext.avroFile("/path/to/your/data")
然后您可以执行以下操作:
val csv = avro.map(_.mkString(","))
然后查看结果,您可以通过运行类似以下命令来检查结果:
csv.take(2).foreach(println)
//Spark2.0 +
import com.databricks.spark.avro._
//Read avro file
val df = spark.read.avro("/FileStore/tables/279ltrs61490238208016/twitter.avro")
df.printSchema()
df.count()
df.show()
//Write to csv file
df.write
.option("header", "true")
.csv("/FileStore/tables/279ltrs61490238208016/twitter_out.csv")
//Read csv file and display contents
val df1 = spark.read.option("header", true).csv("/FileStore/tables/279ltrs61490238208016/twitter_out.csv")
df1.count()
df1.printSchema()
df1.show()
df1.count()
有简单的CSV编码器和解码器,用于在spf4j-avro库中实现avro编码器和解码器接口的avro。 (就像可用的实现二进制和json一样)。只要您的架构符合数组,而记录不能具有数组和映射字段类型,则Csv编码器/解码器将从/到csv进行编码/解码。
代码位于csv。如果您想了解如何利用它,请举一个示例,说明如何实现JAX-RS MessageBody(Reader / Writer)at。
还有这种从avro文件到csv的在线转换器,对我https://avro-tools.com/avro-viewer-and-converter-to-json-and-csv来说已经很有用,我知道的另一种方式是通过Sparkhttps://spark.apache.org/docs/latest/sql-data-sources-avro.html,但这是一个需要在该Framework中进行编程的解决方案。