Загрузить файл с информацией о схеме и динамически применить к файлу данных с помощью Spark - PullRequest
0 голосов
/ 26 июня 2019

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

Я использую Spark 2 и для загрузки одного CSV-файла с моей определенной пользователем схемой, но я хочу обрабатывать это динамически, так что, как только я укажу путь только к файлу схемы, он будет читать его и использовать в качестве заголовков для данные и преобразовать их в датафрейм с помощью схемы, предоставленной в файле схемы.

Предположим, в предоставленной мной папке содержится 2 файла. Один файл будет содержать только данные, заголовок не обязателен. Второй файл будет иметь схему (имена столбцов). Поэтому я должен сначала прочитать файл схемы, а затем файл, содержащий данные, и применить схему к файлу данных и показать ее в фрейме данных.

Небольшой пример, schema.txt содержит:

Custid,Name,Product

в то время как файл данных имеет:

1,Ravi,Mobile

1 Ответ

1 голос
/ 27 июня 2019

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

В этом случае самым простым решением будет считывание файла схемы как csv с установкой заголовка в значение true.Это даст пустой фрейм данных, но с правильным заголовком.Затем прочитайте файл данных и измените имена столбцов по умолчанию на имена в кадре данных схемы.

val schemaFile = ...
val dataFile = ...    

val colNames = spark.read.option("header", true).csv(schemaFile).columns
val df = spark.read
  .option("header", "false")
  .option("inferSchema", "true")
  .csv(dataFile)
  .toDF(colNames: _*)
...