【问题标题】:Spark: How to use Avro schema to create a dataset?Spark:如何使用 Avro 模式创建数据集?
【发布时间】:2020-01-07 19:24:12
【问题描述】:

我有一组 avro 文件保存在 aws S3 中,已知架构在 .avsc 文件中定义。有没有办法用定义的模式在 spark 中创建对象数据集?

架构如下:

{
  "type" : "record",
  "name" : "NameRecord",
  "namespace" : "com.XXX.avro",
  "doc" : "XXXXX",
  "fields" : [ {
    "name" : "Metadata",
    "type" : [ "null", {
      "type" : "record",
      "name" : "MetaNameRecord",
      "doc" : "XXXX",
      "fields" : [ {
        "name" : "id",
        "type" : "int"
      }, {
        "name" : "name",
        "type" : [ "null", "string" ],
        "default" : null
      }]
}

我想创建一个 NameRecord 的数据集:Dataset[NameRecord]

【问题讨论】:

    标签: apache-spark avro apache-spark-dataset avsc


    【解决方案1】:

    根据定义,Avro 对象文件中已经有一个架构。

    应该只需要这样做

    val df = spark.read.format("avro").load("s3://path")
    df.schema
    

    https://spark.apache.org/docs/latest/sql-data-sources-avro.html

    【讨论】:

    • Dataframe 将为我们提供 [Row] 的数据集。我们需要对每条记录执行复杂的功能,以便 Dataset[NameRecord] 成为使用模式 pojo 并轻松获取结构化字段的理想选择。
    • 你应该可以使用load().as() 给它一个特定的架构
    猜你喜欢
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多