我有一个avro数据文件,我需要将其转换为csv文件。 Avro totext工具目前不支持使用自定义架构。有没有工具可以做到这一点?我是否只需要使用avro工具进行编码?
答案 0 :(得分:2)
我问了同样的问题,我只是用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)
答案 1 :(得分:2)
//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()
答案 2 :(得分:0)
有简单的CSV编码器和解码器,用于在spf4j-avro库中实现avro编码器和解码器接口的avro。 (就像可用的实现二进制和json一样)。只要您的架构符合数组,而记录不能具有数组和映射字段类型,则Csv编码器/解码器将对csv进行编码/解码。
代码位于csv。如果您想了解如何利用它,请举一个示例,说明如何实现JAX-RS MessageBody(Reader / Writer)at。
答案 3 :(得分:0)
也有将avro文件在线转换为csv的方法,它对我https://avro-tools.com/avro-viewer-and-converter-to-json-and-csv很有用,我知道的另一种方法是通过Spark https://spark.apache.org/docs/latest/sql-data-sources-avro .html,但这是一个解决方案,需要该框架中进行编程。