Apache spark Databricks模式实施问题
正如关于的文章中所建议的,声明的模式有助于及早发现问题 然而,下面描述的两个问题阻碍了我创建描述性模式 表列上的注释被视为架构中的差异Apache spark Databricks模式实施问题,apache-spark,databricks,database-schema,azure-databricks,delta-lake,Apache Spark,Databricks,Database Schema,Azure Databricks,Delta Lake,正如关于的文章中所建议的,声明的模式有助于及早发现问题 然而,下面描述的两个问题阻碍了我创建描述性模式 表列上的注释被视为架构中的差异 # Get data test_df = spark.createDataFrame([('100000146710')], ['code']) # ... save test_df.write.format("delta").mode("append").save('/my_table_location') # Cre
# Get data
test_df = spark.createDataFrame([('100000146710')], ['code'])
# ... save
test_df.write.format("delta").mode("append").save('/my_table_location')
# Create table: ... BOOM
spark.sql("""
CREATE TABLE IF NOT EXISTS my_table (
code STRING COMMENT 'Unique identifier'
) USING DELTA LOCATION '/my_table_location'
""")
这将失败,原因是分析异常:指定的架构与位于/my_table_位置的现有架构不匹配。我找到的唯一解决办法是删除columnt注释
非空结构字段显示为可空
json_schema = StructType([
StructField("code", StringType(), False)
])
json_df = (spark.read
.schema(json_schema)
.json('/my_input.json')
)
json_df.printSchema()
将显示
root
|-- code: string (nullable = true)
因此,尽管模式声明声明字段不为null,但该字段在数据帧中显示为null。因此,在表列上添加NOTNULL约束将触发AnalysisException错误
欢迎提出任何意见或建议。执行
test_df.write.format("delta").mode("append").save('/my_table_location')
您已经创建了一个新的增量表,其特定架构由test\u df
定义。此新表delta.`/my\u table\u location`
已具有代码字符串的架构
如果您想在模式中创建注释,可能首先按照您希望的定义创建表,例如:
spark.sql("""
CREATE TABLE my_table
code STRING COMMENT 'unique identifier'
USING DELTA LOCATION '/my_table_location'
""")
然后将测试数据插入其中,例如
test_df.createOrReplaceView("test_df_view")
spark.sql("""
INSERT INTO my_table (code) SELECT code FROM test_df_view
""")