4

Databricks Delta テーブルの列名を変更したいと考えていました。

だから私は次のことをしました:

// Read old table data
val old_data_DF = spark.read.format("delta")
.load("dbfs:/mnt/main/sales")

// Created a new DF with a renamed column
val new_data_DF = old_data_DF
      .withColumnRenamed("column_a", "metric1")
      .select("*")

// Dropped and recereated the Delta files location
dbutils.fs.rm("dbfs:/mnt/main/sales", true)
dbutils.fs.mkdirs("dbfs:/mnt/main/sales")

// Trying to write the new DF to the location
new_data_DF.write
.format("delta")
.partitionBy("sale_date_partition")
.save("dbfs:/mnt/main/sales")

ここでは、デルタへの書き込み時に最後のステップでエラーが発生しています。

java.io.FileNotFoundException: dbfs:/mnt/main/sales/sale_date_partition=2019-04-29/part-00000-769.c000.snappy.parquet
A file referenced in the transaction log cannot be found. This occurs when data has been manually deleted from the file system rather than using the table `DELETE` statement

明らかにデータは削除されており、おそらく上記のロジックで何かを見逃している可能性があります。現在、データを含む唯一の場所はnew_data_DF. のような場所への書き込みdbfs:/mnt/main/sales_tmpも失敗します

new_data_DFデルタの場所にデータを書き込むにはどうすればよいですか?

4

2 に答える 2