2015-11-23 48 views
3

什麼是這樣的流程常用手法寫星火Avro的文件(使用Scala的API):星火 - 寫的Avro文件

  1. 從HDFS
  2. 解析某些日誌文件,每個日誌文件適用一些業務邏輯和產生的Avro文件(或者多個文件合併)
  3. 寫的Avro文件到HDFS

我試圖用火花的Avro,但它並沒有太大的幫助。

val someLogs = sc.textFile(inputPath) 

val rowRDD = someLogs.map { line => 

    createRow(...) 

} 

val sqlContext = new SQLContext(sc) 

val dataFrame = sqlContext.createDataFrame(rowRDD, schema) 

dataFrame.write.avro(outputPath) 

此失敗,錯誤:

org.apache.spark.sql.AnalysisException:參考 'StringField' 不明確,可能是:StringField#0,StringField#1,StringField#2,#StringField 3,...

由於提前,

尤利安

+0

你能更具體?例如,爲什麼'spark-avro'不適合你? – zero323

+0

我沒有成功使用Avro使用spark-avro生成的java代碼。另外,當我使用Schema API時,出現以下類型的錯誤:org.apache.spark.sql.AnalysisException:引用'StringField'不明確,可能是:StringField#0,StringField#1,StringField#2,StringField#3 , – d4rkang3l

+0

@ d4rkang3l你確定問題出在avro序列化上嗎? dataFrame是否生成沒有問題? – tomkou

回答

4

Databricks提供的庫火花Avro的,這有助於我們在閱讀和寫作的Avro數據。

dataframe.write.format("com.databricks.spark.avro").save(outputPath) 
0

您需要啓動火花外殼,包括更低的版本

$SPARK_HOME/bin/spark-shell --packages com.databricks:spark-avro_2.11:4.0.0

的Avro package..recommended然後使用df,可以寫爲文件級的Avro

dataframe.write.format( 「com.databricks.spark.avro」)保存(outputPath)

寫,因爲在蜂巢的Avro表 - dataframe.write.format( 「com.databricks.spark.avro」)saveAsTable(hivedb.hivetab le_avro)

1

星火2和Scala 2.11

import com.databricks.spark.avro._ 
import org.apache.spark.sql.SparkSession 

val spark = SparkSession.builder().master("local").getOrCreate() 

// Do all your operations and save it on your Dataframe say (dataFrame) 

dataFrame.write.avro("/tmp/output") 

Maven的依賴

<dependency> 
    <groupId>com.databricks</groupId> 
    <artifactId>spark-avro_2.11</artifactId> 
    <version>4.0.0</version> 
</dependency>