繁体   English   中英

仅当所有表都对数据块和增量表有效时才写入

[英]write only when all tables are valid with databricks and delta table

我正在循环浏览一个文件夹中的一些 CSV 个文件。 我只想将这些 CSV 文件写为增量表,前提是它们都有效。 每个 CSV 文件夹中的文件作为不同的名称和模式。 在数据修复之前,我想拒绝整个文件夹及其包含的所有文件。 我正在运行大量测试,但最终我必须使用以下循环将文件实际编写为增量表(针对此问题进行了简化):

for f in files:
    # read csv 
    df = spark.read.csv(f, header=True, schema=schema)
    # writing to already existing delta table
    df.write.format("delta").save('path/' + f)

有没有回调机制,只有dataframe都没有返回错误才执行write方法? Delta 表模式执行非常严格,这很好,但是尽管在这个循环中传递这些文件之前我正在运行所有测试,但错误随时可能弹出。

union不是一个选项,因为我想按日期处理这个并且每个文件都有不同的模式和名称。

您可以使用df.union()df.unionByName()将所有文件读取到一个 dataframe 中。然后该文件要么被完全写入,要么失败。

# Create empty dataframe with schema to fill up
emptyRDD = spark.sparkContext.emptyRDD()
df = spark.createDataFrame(emptyRDD,schema)

for f in files:
    # read csv 
    dfNext = spark.read.csv(f, header=True, schema=schema)
    df = df.unionByName(dfNext)

df.write.format("delta").save(path)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM