Как записать / writeStream каждую строку кадра данных в другую дельта-таблицу - PullRequest
1 голос
/ 28 июня 2019

Каждая строка моего фрейма данных содержит содержимое в формате CSV.

Я пытаюсь сохранить каждую строку в отдельной и определенной таблице.

Я считаю, что мне нужно использовать foreach или UDF вчтобы выполнить это, но это просто не работает.

Весь контент, который мне удалось найти, был похож на простые отпечатки внутри foreachs или коды с использованием .collect () (который я действительно не хочу использовать).

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

rows = df.count()
df.repartition(rows).write.csv('save-dir')

Можете ли вы привести простой и рабочий пример этого?

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

Ну, в конце концов, как всегда, это что-то очень простое, но я не вижу этого раньше.

В основном, когда вы выполняете foreach, и фрейм данных, который вы хотите сохранить, встроен внутрипетля.Рабочий, в отличие от драйвера, не будет автоматически устанавливать путь "/ dbfs /" при сохранении, поэтому, если вы не добавите вручную "/ dbfs /", он сохранит данные локально на рабочем месте.

Вот почему мои петли не работают.

0 голосов
/ 19 июля 2019

Вы пробовали .mode("append").repartionBy("ID"), он создаст каталог для каждого идентификатора, затем не забудьте поставить режим

0 голосов
/ 28 июня 2019

Сохранение каждой строки в виде таблицы является дорогостоящей операцией и не рекомендуется.Но то, что вы пытаетесь, может быть достигнуто следующим образом -

df.write.format("delta").partitionBy("<primary-key-column>").save("/delta/save-dir")

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

...