2015-11-23 49 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>