我们的组织运行着Azure上的数据库,数据科学家和分析人员主要用于笔记本,以便进行特别的分析和探索。
我们还为不需要火花的ETL工作流运行Kubernetes集群。
我们希望使用达美湖作为我们的存储层,其中数据库和库伯奈特都可以读写作为头等舱公民。
目前,我们的Kubernetes作业直接将parquets写到blob存储,另外还有一个作业可以将databricks集群中的数据加载到Databrick的表格式中。这既慢又贵。
我想要做的是直接从Kubernetes python写到达美湖,而不是第一次将一个拼花文件转储到blob存储,然后触发一个额外的Databricks作业,将它加载到Delta湖格式。
相反,我也想利用达美湖向Kubernetes查询。
简而言之,我如何设置我的Kubernetes python环境,使它能够平等地访问现有的Databricks Delta进行写入和查询?
代码将不胜感激。
发布于 2021-08-14 11:14:08
您通常可以使用用于火花的Delta连接器写入Delta表。只需使用必要的包和配置选项启动一个火花作业
spark-submit --packages io.delta:delta-core_2.12:1.0.0 \
--conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension"
--conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
...
并以与Databricks相同的方式编写:
df.write.format("delta").mode("append").save("some_location")
但是,通过使用Delta的OSS版本,您可能会失去一些仅在Databricks上可用的优化,比如,数据跳过等等--在这种情况下,用Kubernetes编写的数据的性能可能会更低(实际上取决于您如何访问数据)。
有一种情况是,您无法写入由Databricks创建的Delta表--该表是由作者编写的,其编写版本高于OSS连接器所支持的编写版本(请参见德尔塔协议文档)。例如,当您在Delta表上启用变更数据馈送时会发生这种情况,该表在写入数据时执行其他操作。
除了Spark之外,还有计划为基于JVM的语言实现所谓的独立作家 (除了现有的独立阅读器之外)。还有一个用Rust实现的delta-rs项目 (带有Python的绑定),应该能够写入Delta表(但我自己还没有测试过)
更新14.04.2022:从版本1.2.0开始,OSS Delta中也有数据跳过
https://stackoverflow.com/questions/68762384
复制相似问题