DataFrame - это абстрактная концепция Spark, которая напрямую не отображается в формате, который может использоваться, например, записывается в консоль или базу данных.
Создав ForeachWriter
, вы берете строки (или пакеты) DataFrame и определяете, как open()
система назначения, в которую вы хотите записать, как process()
это событиезатем наконец close()
открытые ресурсы.
Используя в качестве примера базу данных JDBC, вы установите сеанс базы данных в open()
и, возможно, определите PreparedStatement
, который сопоставляется с данными, которые вы хотите добавить, затем вы можете process()
некоторый универсальный типT
для выполнения любых действий, которые вы хотите, привязать некоторые поля к выражению.И, наконец, когда вы закончите, вы закроете соединение с базой данных.
В случае записи в консоль на самом деле открывать или закрывать нечего, но вам нужно toString
каждое поле DataFrame, а затем распечатать его
Я полагаю, что варианты использования хорошо изложены в документации , и в основном говорится, что для любой системы, которая не предлагает writeStream.format("x")
способ записи данных, вам необходимо реализоватьэтот класс самостоятельно, чтобы получить данные в ваших последующих системах.
Или, если вам нужно выполнить запись в несколько адресатов, вы можете кэшировать Dataframe перед записью обоих местоположений, так что dataframe не нужно пересчитывать, что приведет к несогласованности данных между вашими адресатами