Неожиданные новые файлы в хранилище дельта — таблиц после разделения?

#python #pyspark #databricks #delta-lake

Вопрос:

Я совсем новичок в дельта-таблице Databricks и пытаюсь понять, как раздел будет работать с точки зрения производительности. Я понимаю, почему при разделении, но не совсем понимаю, как.

В качестве примера рассмотрим следующие (совершенно произвольные) данные

 from pyspark.sql import *
import datetime

City = Row("Name", "CovidInfections", "Date")
city1 = City("Amsterdam", 312, datetime.date(2021, 9, 8))
city2 = City("Amsterdam", 289, datetime.date(2021, 9, 9))
city3 = City("London", 412, datetime.date(2021, 9, 8))
city4 = City("London", 403, datetime.date(2021, 9, 9))
city5 = City("Paris", 201, datetime.date(2021, 9, 8))
city6 = City("Paris", 188, datetime.date(2021, 9, 9))
city7 = City("Berlin", 48, datetime.date(2021, 9, 8))
city8 = City("Berlin", 112, datetime.date(2021, 9, 9))

# Create the dataframe
cities = spark.createDataFrame([city1, city2, city3, city4, city5, city6, city7, city8])
 

Я могу записать эти данные в дельта-таблицу, используя разделение по имени и дате:

 cities.write.partitionBy("Name", "Date").format("delta").mode("overwrite").option("overwriteSchema", True).saveAsTable("covid_cities")
 

И я вижу, что в моем хранилище данных появляются отдельные папки как для имени, так и для даты. Однако, если бы я изменил данные только в одном из этих разделов, скажем

 from pyspark.sql.functions import when
cities_updated = cities.withColumn("CovidInfections", when(cities["Name"]=="Berlin",230).otherwise(cities["CovidInfections"]))
 

и я бы сохранил эти обновленные данные

 cities_updated.write.partitionBy("Name", "Date").format("delta").mode("overwrite").option("overwriteSchema", True).saveAsTable("covid_cities")
 

Я ожидал бы, что это повлияет только на наблюдения, связанные с Берлином. Однако в моем файловом хранилище я вижу, что для каждого города создается новая версия данных.

Кто-нибудь может пояснить, почему это происходит? Я на самом деле правильно разделяю? Или я должен сохранить свои данные каким-то другим способом?