簡體   English   中英

如何從 Kube.netes 向 Delta Lake 寫入數據

[英]How to write data to Delta Lake from Kubernetes

我們的組織在 Azure 上運行 Databricks,數據科學家和分析師主要將其用於筆記本電腦,以便進行臨時分析和探索。

我們還為不需要 spark 的 ETL 工作流運行 Kube.netes 集群。

我們想使用 Delta Lakes 作為我們的存儲層,Databricks 和 Kube.netes 都可以作為第一個 class 公民進行讀寫。
目前,我們的 Kube.netes 作業將 parquet 直接寫入 blob 存儲,還有一個額外的作業會啟動一個 databricks 集群,以將 parquet 數據加載到 Databrick 的表格式中。 這是緩慢且昂貴的。

我想做的是直接從 Kube.netes python 寫入 Delta lake,而不是先將 parquet 文件轉儲到 blob 存儲,然后觸發額外的 Databricks 作業以將其加載為 Delta lake 格式。
相反,我還想利用 Delta lake 從 Kube.netes 進行查詢。


簡而言之,我如何設置我的 Kube.netes python 環境,以便它可以平等地訪問現有的 Databricks Delta Lake 進行寫入和查詢?
代碼將不勝感激。

通常可以使用Delta connector for Spark寫入 Delta 表。 只需使用必要的包和配置選項啟動 Spark 作業:

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 上可用的優化,例如Data Skipping等 - 在這種情況下,從 Kube.netes 寫入的數據的性能可能會降低(實際上取決於如何做您訪問數據)。

可能存在一種情況,當您無法寫入由 Databricks 創建的 Delta 表時 - 當該表是由寫入器編寫的,其寫入器版本高於 OSS Delta 連接器支持的版本(請參閱Delta 協議文檔)。 例如,當您在寫入數據時執行額外操作的增量表上啟用 更改數據饋送時,就會發生這種情況。

在 Spark 之外,有計划為基於 JVM 的語言實現所謂的Standalone writer (除了現有的Standalone reader之外)。 並且在 Rust 中實施了一個delta-rs 項目(綁定了 Python 和 Ruby)應該能夠寫入 Delta 表(但我自己還沒有測試過)

2022 年 4 月 14 日更新:從 1.2.0 版開始,OSS Delta 也提供數據跳過功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM