在 Spark 中读取 Avro 文件

问题描述 投票:0回答:3

我已将 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

谁能告诉我是否有一个简单的解决方案?

scala apache-spark apache-spark-sql apache-zeppelin
3个回答
15
投票

对于

DataFrame
我会直接使用 Avro 数据源:

  • 在软件包列表中包含spark-avro。对于最新版本使用:

    com.databricks:spark-avro_2.11:3.2.0
    
  • 加载文件:

    val df = spark.read
      .format("com.databricks.spark.avro")
      .load(path)
    

0
投票

如果您的项目是 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")

0
投票

新的Spark 3.X版本,支持格式化功能。

spark.read.format("avro").load("path to mounted storage")

© www.soinside.com 2019 - 2024. All rights reserved.