Я использую spark версии 2.3 и пытаюсь прочитать таблицу улья в spark как:
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
df = spark.table("emp.emptable")
здесь я добавляю новый столбец с текущей датой из системы в существующий фрейм данных
import pyspark.sql.functions as F
newdf = df.withColumn('LOAD_DATE', F.current_date())
и теперь сталкиваюсь с проблемой, когда я пытаюсь записать этот фрейм данных в виде таблицы кустов
newdf.write.mode("overwrite").saveAsTable("emp.emptable")
pyspark.sql.utils.AnalysisException: u'Cannot overwrite table emp.emptable that is also being read from;'
, поэтому я ставлю контрольную точку для фрейма данных, чтобы разорвать родословную, так как я читаю и пишу с того же фрейма данных
checkpointDir = "/hdfs location/temp/tables/"
spark.sparkContext.setCheckpointDir(checkpointDir)
df = spark.table("emp.emptable").coalesce(1).checkpoint()
newdf = df.withColumn('LOAD_DATE', F.current_date())
newdf.write.mode("overwrite").saveAsTable("emp.emptable")
Таким образом, все работает нормально, и в таблицу кустов добавлен новый столбец.но я должен удалять файлы контрольных точек каждый раз, когда они создаются.Есть ли лучший способ разорвать родословную и написать тот же кадр данных с обновленными данными столбца и сохранить его в папку hdfs или в виде таблицы кустов.
или есть какой-либо способ указать временное местоположение для каталога контрольных точек,который будет удален после завершения сеанса spark.