Как использовать gradle mlExportToFile и REST Transform для создания файла NDJSON

В настоящее время я использую gradle mlExportToFile для экспорта документов json в файл. Однако мне нужно, чтобы окончательный файл был в формате JSON с разделителями новой строки, где каждый документ находился в отдельной строке в файле. Я видел, что метод преобразования mlExportToFile + REST можно использовать для создания CSV, поэтому я предполагаю, что этот подход также будет работать для NDJSON. Я перепробовал почти все, что мог придумать, и файл все еще не размещает записи на своих строках. Любые советы высоко ценится!!


person Hank    schedule 24.11.2020    source источник
comment
Я не знаю, что такое mlExportToFile, но вы, вероятно, могли бы написать небольшую задачу Gradle, которая красиво печатает файл json после его экспорта. Это сработает для вас?   -  person Bjørn Vester    schedule 25.11.2020


Ответы (1)


Я думаю, что ограничение здесь заключается в том, что когда базовый ExportToWriterListener (из библиотеки ML Java Client/DMSDK) запишет документ в файл в формате, полученном из ML, который по умолчанию будет включать новые строки. Задача ml-gradle — это всего лишь одна строка кода — runQueryBatcherJob(new ExportToFileJob()) — так что вы можете легко настроить свою собственную задачу.

Я считаю, что вы можете повторно использовать ExportToFileJob (который находится в проекте marklogic-data-movement-components) - в нем есть метод getExportListener(), который возвращает ExportToWriterListener (в проекте marklogic-client-api). И у него есть метод onGenerateOutput(OutputListener), в котором вы можете написать OutputListener, который объединяет JSON в одну строку.

Это, безусловно, может стать новой функцией и в ml-gradle; то есть такое свойство, как -PnewlineDelimitedJson=true.

Не стесняйтесь поднять заявку в проекте ml-gradle для этого (хотя на самом деле улучшение будет сделано в marklogic-data-movement- компоненты проекта).

person rjrudin    schedule 25.11.2020
comment
Спасибо, это действительно полезно! - person Hank; 25.11.2020