Поделиться через


Функция from_csv

Область применения: флажок Databricks SQL флажок Databricks Runtime

Возвращает значение структуры с использованием csvStr и schema.

Синтаксис

from_csv(csvStr, schema [, options])

Аргументы

  • csvStr: СТРОКОВОЕ выражение, указывающее запись в формате CSV.
  • schema: строковый (STRING) литерал или вызов функции schema_of_csv.
  • options: необязательный литерал MAP<STRING,STRING>, в котором указаны директивы.

Возвраты

Структура с именами полей и типами, соответствующими определению схемы.

Параметр csvStr должен быть правильно сформирован по отношению к schema и options. Параметр schema должен быть определен как имя столбца с разделителями-запятыми и пары типов данных, используемых в примере CREATE TABLE.

Параметр options, если он указывается, может иметь любое из следующих значений:

  • sep (по умолчанию ,): задает разделитель для каждого поля и значения. Этот разделитель может содержать один или несколько символов.
  • encoding (по умолчанию UTF-8): декодирует CSV-файлы по указанному типу кодировки.
  • quote (по умолчанию "): задает отдельный символ, используемый для экранирования заключенных в кавычки значений, в которых разделитель может быть частью значения. Если вы хотите отключить кавычки, необходимо задать значение NOT NULL, но оставить строку пустой. Эта реакция на событие отличается от com.databricks.spark.csv.
  • escape (по умолчанию \): задает отдельный символ, используемый для экранирования кавычек в составе значения, уже заключенного в кавычки.
  • charToEscapeQuoteEscaping (по умолчанию escape или \0): задает отдельный символ, используемый для экранирования escape-символа кавычек. Значение по умолчанию — escape-символ, если символы escape и quote различаются, в противном случае — \0.
  • comment (пустая строка по умолчанию): задает отдельный символ, используемый для пропуска строк, начинающихся с этого символа. По умолчанию этот параметр отключен.
  • header (по умолчанию false): использует первую строку в качестве имен столбцов.
  • enforceSchema (по умолчанию true): если задано значение true, то указанная или выводимая схема принудительно применяется к файлам DataSource, а заголовки в CSV-файлах игнорируются. Если параметр имеет значение false, схема проверяется по всем заголовкам в CSV-файлах в случае, если параметру header присвоено значение true. Имена полей в схемах и имена столбцов в заголовках CSV проверяются по их положениям с учетом spark.sql.caseSensitive. Значение по умолчанию — true, однако, рекомендуется отключить параметр enforceSchema, чтобы избежать неверных результатов.
  • inferSchema (по умолчанию false): автоматически выводит входную схему из данных. Для этого требуется один дополнительный проход по данным.
  • samplingRatio (по умолчанию 1,0): определяет долю строк, используемых для вывода схемы.
  • ignoreLeadingWhiteSpace (по умолчанию false): флаг, указывающий, следует ли пропускать начальные пробелы в считываемых значениях.
  • ignoreTrailingWhiteSpace (по умолчанию false): флаг, указывающий, следует ли пропускать конечные пробелы в считываемых значениях.
  • nullValue (пустая строка по умолчанию): задает строковое представление значения null (нулевое).
  • emptyValue (пустая строка по умолчанию): задает строковое представление пустого значения.
  • nanValue (по умолчанию NaN): задает строковое представление нечислового значения.
  • positiveInf (по умолчанию Inf): задает строковое представление значения положительной бесконечности.
  • negativeInf (по умолчанию -Inf)): задает строковое представление значения отрицательной бесконечности.
  • dateFormat (по умолчанию yyyy-MM-dd): задает строку, которая указывает формат даты. В пользовательских форматах даты применяются форматы шаблонов даты и времени. Это относится к типу date.
  • timestampFormat (по умолчанию yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): задает строку, которая обозначает формат метки времени. В пользовательских форматах даты применяются форматы шаблонов даты и времени. Это относится к типу timestamp.
  • maxColumns (по умолчанию 20480): определяет фиксированное ограничение количества столбцов в записи.
  • maxCharsPerColumn (по умолчанию -1): определяет максимальное число символов, разрешенное для чтения любого указанного значения. По умолчанию значение -1 означает неограниченную длину.
  • unescapedQuoteHandling (по умолчанию STOP_AT_DELIMITER): определяет, каким образом средство синтаксического анализа CSV обрабатывает значения с помощью неэкранированных кавычек.
    • STOP_AT_CLOSING_QUOTE: если во входных данных найдены неэкранированные кавычки, накапливайте символ кавычки и продолжайте анализ значения в виде заключенного в кавычки значения, пока не будет найдена закрывающая кавычка.
    • BACK_TO_DELIMITER: если во входных данных обнаружены неэкранированные кавычки, рассматривать значение как значение без кавычек. Это позволит средству синтаксического анализа накапливать все символы текущего анализируемого значения до тех пор, пока не будет найден разделитель. Если в значении разделитель обнаружен не будет, то средство синтаксического анализа продолжит накапливать символы из входных данных до тех пор, пока не будет найден разделитель или конец строки.
    • STOP_AT_DELIMITER: если во входных данных обнаружены неэкранированные кавычки, рассматривать значение как значение без кавычек. Это позволит средству синтаксического анализа накапливать все символы до тех пор, пока во входных данных не будет найден разделитель или символ конца строки.
    • STOP_AT_DELIMITER: если во входных данных обнаруживаются неэкранированные кавычки, содержимое, проанализированное для указанного значения, пропускается и вместо него создается значение, заданное в nullValue.
    • RAISE_ERROR: если во входных данных обнаруживаются неэкранированные кавычки, создается TextParsingException.
  • mode (по умолчанию PERMISSIVE): разрешает режим работы с поврежденными записями во время синтаксического анализа. Поддерживаются перечисленные ниже режимы без учета регистра. Spark пытается выполнить синтаксический анализ только обязательных столбцов в CSV-файле при удалении столбцов. Таким образом, поврежденные записи могут отличаться в зависимости от требуемого набора полей. Эти действия можно контролировать с помощью spark.sql.csv.parser.columnPruning.enabled (включено по умолчанию).
    • PERMISSIVE: при обнаружении поврежденной записи неправильно сформированная строка помещается в поле, настроенное с помощью columnNameOfCorruptRecord, и устанавливаются значения null для неверно сформированных полей. Для сохранения поврежденных записей пользователь может задать поле строкового типа с именем columnNameOfCorruptRecord в пользовательской схеме. Если в схеме нет этого поля, то поврежденные записи удаляются во время синтаксического анализа. Запись, у которой количество маркеров меньше или больше, чем в схеме, не является поврежденной записью для CSV-файла. При обнаружении записи с меньшим количеством маркеров, чем в схеме, дополнительным полям присваивается значение null. Если запись содержит большее количество маркеров, чем в схеме, лишние маркеры удаляются.
    • FAILFAST: вызывает исключение, если оно соответствует поврежденным записям.
  • columnNameOfCorruptRecord (по умолчанию — значение, заданное в spark.sql.columnNameOfCorruptRecord): позволяет переименовать новое поле, имеющее неправильно сформированную строку, созданную в режиме PERMISSIVE. Переопределяет параметр spark.sql.columnNameOfCorruptRecord.
  • multiLine (по умолчанию false): анализ одной записи, которая может охватывать несколько строк.
  • locale (по умолчанию en-US): задает языковой стандарт в виде языкового тега в формате IETF BCP 47. Например, используется при синтаксическом анализе дат и меток времени.
  • lineSep (по умолчанию охватывает все \r, \r\n и \n): определяет разделитель строк, который должен использоваться для синтаксического анализа. Максимальная длина составляет 1 символ.
  • pathGlobFilter: необязательная стандартная маска только для включения файлов, имеющих пути в соответствии с шаблоном. Синтаксис соответствует org.apache.hadoop.fs.GlobFilter. Это не изменяет реакцию на обнаружение секций.

Примеры

> SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');
 {1,0.8}
> SELECT from_csv('26/08/2015', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
 {"time":2015-08-26 00:00:00}