在Java中将Avro转换为ORC



我想从Kafka消费的Avro消息中创建一堆ORC文件。

我在下面看到了一些使用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());

使用Databricks avro阅读器for Spark创建数据帧。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