在java中将avro转换成orc?

3okqufwl  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(534)

我想从Kafka的avro信息中创建一堆兽人文件。
我在下面看到了一些使用spark的示例代码。我只是在一个独立的进程中运行它,并且想知道我应该研究什么样的选项。例如,我想将这些文件注入到像s3这样的云存储中。有推荐的方法吗?

SparkConf sparkConf = new SparkConf()
    .setAppName("Converter Service")
    .setMaster("local[*]");

SparkSession sparkSession = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate();

// read input data
Dataset<Row> events = sparkSession.read()
    .format("json")
    .schema(inputConfig.getSchema()) // StructType describing input schema
    .load(inputFile.getPath());

// write data out
DataFrameWriter<Row> frameWriter = events
    .selectExpr(
        // useful if you want to change the schema before writing it to ORC, e.g. ["`col1` as `FirstName`", "`col2` as `LastName`"]
        JavaConversions.asScalaBuffer(outputSchema.getColumns()))
    .write()
    .options(ImmutableMap.of("compression", "zlib"))
    .format("orc")
    .save(outputUri.getPath());
6fe3ivhb

6fe3ivhb1#

使用databricks avro reader for spark创建Dataframe。spark本机支持orc,因此创建文件很容易。
你可以在maven找到avro图书馆。
在scala中,会出现这样的情况:

import spark.implicits._
import org.apache.spark.sql.SparkSession

val spark = SparkSession
  .builder()
  .appName("Spark SQL basic example")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()

val df = spark.read.format("avro").load("/tmp/episodes.avro")
// From string: val df = spark.read.avro(Seq(avroString).toDS)

df.write.orc("name.orc") // You can write to S3 here

相关问题