Как создать таблицу из авро схемы (.avsc)? - PullRequest
1 голос
/ 03 июня 2019

У меня есть файл схемы avro, и мне нужно создать таблицу в Databricks через pyspark.Мне не нужно загружать данные, просто хочу создать таблицу.Самый простой способ - загрузить строку JSON и взять массивы "name" и "type" из fields.Затем создайте запрос CREATE SQL.Я хочу знать, есть ли программный способ сделать это с любым API.Пример схемы -

{
  "type" : "record",
  "name" : "kylosample",
  "doc" : "Schema generated by Kite",
  "fields" : [ {
    "name" : "registration_dttm",
    "type" : "string",
    "doc" : "Type inferred from '2016-02-03T07:55:29Z'"
  }, {
    "name" : "id",
    "type" : "long",
    "doc" : "Type inferred from '1'"
  }, {
    "name" : "first_name",
    "type" : "string",
    "doc" : "Type inferred from 'Amanda'"
  }, {
    "name" : "last_name",
    "type" : "string",
    "doc" : "Type inferred from 'Jordan'"
  }, {
    "name" : "email",
    "type" : "string",
    "doc" : "Type inferred from 'ajordan0@com.com'"
  }, {
    "name" : "gender",
    "type" : "string",
    "doc" : "Type inferred from 'Female'"
  }, {
    "name" : "ip_address",
    "type" : "string",
    "doc" : "Type inferred from '1.197.201.2'"
  }, {
    "name" : "cc",
    "type" : [ "null", "long" ],
    "doc" : "Type inferred from '6759521864920116'",
    "default" : null
  }, {
    "name" : "country",
    "type" : "string",
    "doc" : "Type inferred from 'Indonesia'"
  }, {
    "name" : "birthdate",
    "type" : "string",
    "doc" : "Type inferred from '3/8/1971'"
  }, {
    "name" : "salary",
    "type" : [ "null", "double" ],
    "doc" : "Type inferred from '49756.53'",
    "default" : null
  }, {
    "name" : "title",
    "type" : "string",
    "doc" : "Type inferred from 'Internal Auditor'"
  }, {
    "name" : "comments",
    "type" : "string",
    "doc" : "Type inferred from '1E+02'"
  } ]
}

1 Ответ

0 голосов
/ 04 июня 2019

Пока что это недоступно через Python API ... Так я делал это в прошлом, создавая внешнюю таблицу с помощью Spark SQL, указывающую на ваш экспортированный файл .avsc, поскольку вы хотите создать только таблицу и не загружать данные ... пример:

spark.sql("""
create external table db.table_name
STORED AS AVRO
LOCATION 'PATH/WHERE/DATA/WILL/BE/STORED'
TBLPROPERTIES('avro.schema.url'='PATH/TO/SCHEMA.avsc')
""")

Встроенный Scala API в Spark 2.4, похоже, теперь доступен для чтения .avsc ... поскольку вы используете Databricks, вы можете изменить свое ядро ​​в блокноте, как %scala or %python or %sql ... Пример Scala:

import org.apache.avro.Schema

val schema = new Schema.Parser().parse(new File("user.avsc"))

spark
  .read
  .format("avro")
  .option("avroSchema", schema.toString)
  .load("/tmp/episodes.avro")
  .show()

Справочные документы для Spark 2.4 Avro Integration =>

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

https://databricks.com/blog/2018/11/30/apache-avro-as-a-built-in-data-source-in-apache-spark-2-4.html

...