在 Spark 中读取 Avro 文件
Posted
技术标签:
【中文标题】在 Spark 中读取 Avro 文件【英文标题】:Reading Avro File in Spark 【发布时间】:2018-01-03 17:57:19 【问题描述】:我已将 avro 文件读入 spark RDD,需要将其转换为 sql 数据帧。我该怎么做。
这是我到目前为止所做的。
import org.apache.avro.generic.GenericRecord
import org.apache.avro.mapred.AvroInputFormat, AvroWrapper
import org.apache.hadoop.io.NullWritable
val path = "hdfs://dds-nameservice/user/ghagh/"
val avroRDD = sc.hadoopFile[AvroWrapper[GenericRecord], NullWritable, AvroInputFormat[GenericRecord]](path)
当我这样做时:
avro.take(1)
我回来了
res1: Array[(org.apache.avro.mapred.AvroWrapper[org.apache.avro.generic.GenericRecord], org.apache.hadoop.io.NullWritable)] = Array(("column1": "value1", "column2": "value2", "column3": value3,...
如何将其转换为 SparkSQL 数据帧?
我使用的是 Spark 1.6
谁能告诉我是否有一个简单的解决方案?
【问题讨论】:
【参考方案1】:对于DataFrame
,我会选择Avro data source directly:
在包列表中包含 spark-avro。对于最新版本,请使用:
com.databricks:spark-avro_2.11:3.2.0
加载文件:
val df = spark.read
.format("com.databricks.spark.avro")
.load(path)
【讨论】:
--packages org.apache.spark:spark-avro_2.11:2.4.4
也可以工作,而--packages org.apache.spark:spark-avro_2.12:2.4.4
不能。详情在issue【参考方案2】:
如果您的项目是 maven,则在 pom.xml 中添加以下最新依赖项
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-avro_2.11</artifactId>
<version>4.0.0</version>
</dependency>
之后,您可以读取avro
文件,如下所示
val df=spark.read.format("com.databricks.spark.avro").option("header","true").load("C:\\Users\\alice\\inputs\\sample_data.avro")
【讨论】:
以上是关于在 Spark 中读取 Avro 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 spark-avro 包从 spark-shell 读取 avro 文件?
在 emr 中使用 spark 从 S3 读取 avro 失败
使用 pyspark 在 Jupyter notebook 中读取 avro 文件时遇到问题