При записи в таблицу Delta обнаружено несоответствие схемы - Azure Блоки данных - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь загрузить "small_radio_ json. json" в таблицу Delta Lake. После этого кода я хотел бы создать таблицу.

Я пытаюсь создать таблицу Delta, но получаю ошибку «При записи в таблицу Delta обнаружено несоответствие схемы». Это может быть связано с разделом "events.write.format (" delta "). Mode (" overwrite "). PartitionBy (" artist "). Save (" / delta / events / ")"

Как исправить или изменить код.

//https://docs.microsoft.com/en-us/azure/azure-databricks/databricks-extract-load-sql-data-warehouse
//https://docs.microsoft.com/en-us/azure/databricks/_static/notebooks/delta/quickstart-scala.html

//Session configuration
val appID = "123558b9-3525-4c62-8c48-d3d7e2c16a6a"
val secret = "123[xEPjpOIBJtBS-W9B9Zsv7h9IF:qw"
val tenantID = "12344839-0afa-4fae-a34a-326c42112bca"

spark.conf.set("fs.azure.account.auth.type", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type", 
"org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id", "<appID>")
spark.conf.set("fs.azure.account.oauth2.client.secret", "<secret>")

spark.conf.set ("fs. azure .account.oauth2.client.endpoint", "https://login.microsoftonline.com/ / oauth2 / token") spark.conf .set ("fs. azure .createRemoteFileSystemDuringInitialization", "true")

// Информация об учетной записи val storageAccountName = "mydatalake" val fileSystemName = "fileshare1"

spark.conf.set("fs.azure.account.auth.type." + storageAccountName + ".dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type." + storageAccountName + 
".dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id." + storageAccountName + ".dfs.core.windows.net", 
"" + appID + "")
spark.conf.set("fs.azure.account.oauth2.client.secret." + storageAccountName + 
".dfs.core.windows.net", "" + secret + "")
spark.conf.set("fs.azure.account.oauth2.client.endpoint." + storageAccountName + 
".dfs.core.windows.net", "https://login.microsoftonline.com/" + tenantID + "/oauth2/token")
spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true")
dbutils.fs.ls("abfss://" + fileSystemName  + "@" + storageAccountName + ".dfs.core.windows.net/")
spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "false")

dbutils.fs.cp("file:///tmp/small_radio_json.json", "abfss://" + fileSystemName + "@" + 
storageAccountName + ".dfs.core.windows.net/")

val df = spark.read.json("abfss://" + fileSystemName + "@" + storageAccountName + 

". dfs.core. windows .net / small_radio_ json. json ")

//df.show()

import org.apache.spark.sql._

import org. apache .spark. sql .functions ._

val events = df

display(events)

import org.apache.spark.sql.SaveMode

events.write.format("delta").mode("overwrite").partitionBy("artist").save("/delta/events/")
import org.apache.spark.sql.SaveMode

val events_delta = spark.read.format ("delta"). Load ("/ delta / events /") отображение (events_delta)

//HERE ERROR OCCURS:

org.apache.spark.sql.AnalysisException: A schema mismatch detected when writing to the Delta table.
To enable schema migration, please set:
'.option("mergeSchema", "true")'.

Table schema:
root
-- action: string (nullable = true)
-- date: string (nullable = true)


Data schema:
root
-- artist: string (nullable = true)
-- auth: string (nullable = true)
-- firstName: string (nullable = true)
-- gender: string (nullable = true)
...

1 Ответ

1 голос
/ 29 марта 2020

Скорее всего, /delta/events/ действительно имеет какие-либо данные, поэтому при загрузке данных из того же каталога вы можете получить такой тип исключения.

...