【问题标题】:Avro schema ( .avsc ) enforcement in PysparkPyspark 中的 Avro 模式 ( .avsc ) 实施
【发布时间】:2021-06-19 18:27:15
【问题描述】:

谁能帮助我通过 Pyspark 读取 avro 模式 (.avsc) 并在将数据帧写入目标存储时强制执行它?我所有的 targetr 表模式都以 .avsc 文件的形式提供,我需要提供这个自定义模式,同时将我的数据框保存在 Pyspark 中。我知道有来自 databricks 的类似 spark-avro 的库。但是所有的例子都是在 Scala 中给出的。

【问题讨论】:

    标签: pyspark avro spark-avro


    【解决方案1】:

    有了这个文件/tmp/test.avsc

    {
         "type": "record",
         "namespace": "com.example",
         "name": "FullName",
         "fields": [
           { "name": "first", "type": "string" },
           { "name": "last", "type": "string" }
         ]
    }
    

    和这样的数据框:

    df = spark.createDataFrame([{"first": "john", "last": "parker" }], StructType([StructField("first", StringType()), StructField("last", StringType())]))
    

    导致:

    +-----+------+
    |first|  last|
    +-----+------+
    | john|parker|
    +-----+------+
    

    您可以这样做来强制写入架构:

    jsonFormatSchema = open("/tmp/test.avsc", "r").read() 
    df.write.format("avro").options(avroSchema=jsonFormatSchema).save("/tmp/avro")
    

    与强制读取模式类似:

    spark.read.format('avro').options(avroSchema=jsonFormatSchema).load("/tmp/avro")
    

    更多信息可在此处获得,顺便说一句,这里有足够多的 python 示例:https://spark.apache.org/docs/latest/sql-data-sources-avro.html

    【讨论】:

    • 我想写成 parquet 而不是 avro。此示例用于编写为 avro
    • 你的问题是如何强制执行模式,我已经给了你答案,所以我想你可以忽略写作部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多