【问题标题】:Reading Avro File in Spark在 Spark 中读取 Avro 文件
【发布时间】: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

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

【问题讨论】:

    标签: scala apache-spark apache-spark-sql apache-zeppelin


    【解决方案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")
    

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      相关资源
      最近更新 更多