Добавить столбцы к существующему файлу CSV в HDFS - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь добавить столбцы к существующему файлу CSV в HDFS.

Script1:

someDF1.repartition(1).write.format("com.databricks.spark.csv").mode("append").option("sep", "\t").option("header","true").save("folder/test_file.csv")

Ошибка:

org.apache.hadoop.fs.FileAlreadyExistsException: Parent path is not a directory.

Любые предложения по ошибкебыло бы полезно

1 Ответ

0 голосов
/ 03 октября 2018

CSV-файлы не поддерживают Schema Evolution.Поэтому в основном вам нужно прочитать все данные в целевом пути, а затем добавить новый столбец в этом кадре данных со значением по умолчанию.

val oldDF = dfWithExistingData.withColumn("new_col", lit(null))

Затем вы можете объединить или объединить этот кадр данных сновый набор данных.

val targetData = oldDF.union(newDF)

Затем вы можете записать данные обратно на целевой путь в режиме перезаписи.

targetData
.repartition(1)
.write
.format("com.databricks.spark.csv")
.mode("overwrite")
.option("sep", "\t")
.option("header","true")
.save("folder")

Альтернатива : вы можете переключиться на другие форматы файлов, которые поддерживаютэволюция схемы, например: паркет, чтобы избежать выполнения вышеуказанного процесса.

...