Apache spark Spark-write Avro文件
在如下流程中使用Spark(使用Scala API)编写Avro文件的常见做法是:Apache spark Spark-write Avro文件,apache-spark,avro,Apache Spark,Avro,在如下流程中使用Spark(使用Scala API)编写Avro文件的常见做法是: 从HDFS解析一些日志文件 对于每个日志文件,应用一些业务逻辑并生成Avro文件(或者可能合并多个文件) 将Avro文件写入HDFS 我试着使用spark avro,但没有多大帮助 val someLogs = sc.textFile(inputPath) val rowRDD = someLogs.map { line => createRow(...) } val sqlContext = ne
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:
Reference 'StringField' is ambiguous, could be: StringField#0, StringField#1, StringField#2, StringField#3, ...
Databricks提供了spark avro库,帮助我们读取和写入avro数据
dataframe.write.format("com.databricks.spark.avro").save(outputPath)
您需要启动spark shell以包含avro软件包。建议用于较低版本 $SPARK_HOME/bin/SPARK shell——软件包com.databricks:SPARK-avro_2.11:4.0.0 然后使用df作为avro文件写入-
dataframe.write.format("com.databricks.spark.avro").save(outputPath)
并在hive中以avro表的形式写入-
dataframe.write.format("com.databricks.spark.avro").saveAsTable(hivedb.hivetable_avro)
Spark 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>
com.databricks
spark-avro_2.11
4.0.0
您能更具体一点吗?例如,为什么'spark avro'不适合您?我没有成功地将avro生成的java代码与spark avro一起使用。另外,当我使用模式API时,我会遇到这样的错误:org.apache.spark.sql.AnalysisException:Reference'StringField'不明确,可能是:StringField#0、StringField#1、StringField#2、StringField#3、@d4rkang3l您确定问题出在avro序列化上吗?数据帧生成是否没有问题?在Java 8中:df2.write().format(“com.databricks.spark.avro”).mode(SaveMode.Overwrite).save(f.getOutputPath());我怀疑。avro(“/tmp/output”)是否有效。我认为应该使用这种方法:write.format(“avro”).save(/output/path)Paul“append”的语法对于表来说,我似乎无法得到正确的结果。您能否验证是否可能以及如何验证?“.saveAsTable(hivedb.hivetable_avro)”部分将出现以下警告问题:WARN hive.HiveExternalCatalog:找不到数据源提供程序com.databricks.spark.avro的对应配置单元服务器。将数据源表dbName.Suchas.hivedb
tableName.Suchas.hivetable_avro
以Spark SQL特定格式持久化到配置单元元存储中,该格式与配置单元不兼容。至少spark2是这样的