【问题标题】:Converting Avro to ORC in Java?在 Java 中将 Avro 转换为 ORC?
【发布时间】:2020-11-05 09:44:14
【问题描述】:

我希望从 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());

【问题讨论】:

    标签: apache-spark apache-kafka avro orc


    【解决方案1】:

    为 Spark 使用 Databricks avro reader 创建数据帧。 Spark 原生支持 ORC,因此文件创建轻而易举。

    您会找到 Avro 库 in Maven

    在 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
    

    【讨论】:

    • 我是否需要 spark 上下文和所有这些运行才能使其工作?
    • 是的。我在上面的答案中添加了火花会话的详细信息。
    • Databricks 有一个 avro 阅读器。这应该会大大简化您的工作,并使添加 Spark 依赖项值得您花时间。我已经相应地更新了我的答案。
    • 谢谢@Lars。那么 Spark 依赖项是否可以与进行转换的代码存在于同一个容器中?我希望所有东西都打包成一个东西,但对 Spark 不太熟悉
    • 是的。在容器中包含 Spark 后,添加依赖项就很简单了。
    猜你喜欢
    • 2020-11-12
    • 2017-09-26
    • 2016-04-29
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多