Есть ли способ программно установить схему набора данных из .csv

#palantir-foundry #foundry-code-repositories

#palantir-foundry #foundry-code-репозитории

Вопрос:

В качестве примера у меня есть .csv , который использует диалект Excel, который использует что-то вроде модуля csv Python doubleQuote для экранирования кавычек.

Например, рассмотрим строку ниже:

 "XX ""YYYYYYYY"", ZZZZZZ ""QQQQQQ""","JJJJ ""MMMM"", RRRR ""TTTT""",1234,RRRR,60,50
  

Я бы хотел, чтобы схема затем стала:

  [
   'XX "YYYYYYYY", ZZZZZZ "QQQQQQ"',
   'JJJJ "MMMM", RRRR "TTTT"',
   1234,
   'RRRR',
   60,
   50
 ]
  

Есть ли способ установить схему набора данных программным / автоматическим способом?

Ответ №1:

Хотя вы можете сделать это в коде, приложение foundrys dataset-app также может делать это изначально. Это означает, что вы можете пропустить написание кода (что приятно), но также означает, что вы можете потенциально сохранить шаг в своем конвейере (что может сэкономить время выполнения).

После загрузки файлов в набор данных нажмите «редактировать схему» в наборе данных: кнопка редактирования схемы

Затем примените настройки, подобные приведенным ниже, что приведет к желаемому результату в вашем случае:

редактор схем

Затем нажмите «сохранить и проверить», и набор данных должен получить правильную схему:

окончательный набор данных

Ответ №2:

Начиная с этого примера:

 Dataset<Row> dataset = files
        .sparkSession()
        .read()
        .option("inferSchema", "true")
        .csv(csvDataset);

output.getDataFrameWriter(dataset).write();
  

Добавьте параметры header , quote , и escape , например, так:

 Dataset<Row> dataset = files
        .sparkSession()
        .read()
        .option("inferSchema", "true")
        .option("header", "true")
        .option("quote", """)
        .option("escape", """)
        .csv(csvDataset);

output.getDataFrameWriter(dataset).write();