Перезапись файла паркета вызывает искру - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь прочитать файл паркета из папки hdfs, выполнить некоторые преобразования и перезаписать файл в том же месте. Мне пришлось перезаписать файл в том же месте, потому что мне пришлось запускать один и тот же код несколько раз.

Вот код, который я написал

val df = spark.read.option("header", "true").option("inferSchema", "true").parquet("hdfs://master:8020/persist/local/")
//after applying some transformations lets say the final dataframe is transDF which I want to overwrite at the same location.
transDF.write.mode("overwrite").parquet("hdfs://master:8020/persist/local/")

Теперь проблема в том, что перед чтением файла паркета из заданного места, спарк почему-то, я полагаю, удаляет файл в заданном месте из-за режима перезаписи. Поэтому при выполнении кода я получаю следующую ошибку.

File does not exist: hdfs://master:8020/persist/local/part-00000-e73c4dfd-d008-4007-8274-d445bdea3fc8-c000.snappy.parquet

Есть предложения, как решить эту проблему? Благодарю.

1 Ответ

0 голосов
/ 04 сентября 2018

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

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

...