2017-07-27 107 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