繁体   English   中英

使用Spark-Java读取HDFS中存储的Avro表和架构

[英]Reading Avro table and schema stored in HDFS using Spark- Java

我正在尝试读取存储在HDFS中的Avro表,同时指定也存储在HDFS中的架构。 目前,我有这个解决方案似乎有效:

    RDD<String> stringRDD = sparkContext.textFile(schemaPath, 1);
    String [] collect = (String []) stringRDD.collect();
    String schema = collect[0];
    Dataset<Row> df  =sqlContext.read().format("com.databricks.spark.avro").option("avroSchema", schema)
            .load(tablePath);

这是最好的方法吗? 如果模式足够大,例如可以有2个分区怎么办? 我应该使用reduce()合并它们吗?

干杯

我知道自问这个问题已经有一年了,但是我最近正想做同样的事情,这个问题在Google上名列前茅。

因此,我能够使用Hadoop的FileSystem类来做到这一点:

import org.apache.avro.Schema;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.Path;

String schemaPath = "/path/to/schema/in/hdfs.avsc";
FSDataInputStream schemaFile = FileSystem.get(sparkContext.hadoopConfiguration).open(new Path(schemaPath));
Schema schema = new Schema.Parser().parse(schemaFile);
String schemaString = schema.toString();

希望这可以帮助!

使用Spark 2.1.1的另一种方法

import org.apache.avro.Schema
val avroSchema = spark.sparkContext.wholeTextFiles(source).take(1)(0)._2
val schema = new Schema.Parser().parse(avroSchema)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM