2017-07-27 82 views
0

我已经读取了一个avro文件到火花RDD中,并且需要将其转换为一个sql数据框。我怎么做。在火花中读取Avro文件

这是我到目前为止所做的。

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

谁能告诉我,如果有解决这个简单的解决方案?

回答

0

对于DataFrame我用的Avro data source directly去:

  • 包括在包列表火花的Avro。最新的版本使用:

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

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

我已经试过这其中因错误而失败。 org.apache.spark.SparkException:由于阶段失败导致作业中止:阶段2.0中的任务0失败4次,最近失败:阶段2.0中丢失的任务0.3(TID 1599,执行器1):ExecutorLostFailure(执行器1退出正在运行的任务)原因:标记为失败的容器:container_e82_1498595332605_58299_01_000002在主机:localhost.com上。退出状态:50.诊断:容器启动异常。 容器ID:container_e82_1498595332605_58299_01_000002 退出代码:50 – Gayatri