Создание базы данных из Excel с использованием Scala - PullRequest
0 голосов
/ 11 июня 2018

Я ищу способ построения фрейма данных из файла Excel в spark с использованием scala?Я упомянул ниже сообщение SO и попытался выполнить операцию для прикрепленного листа Excel.

Excel sheet sample

Как построить Dataframe из Excel (xls,xlsx) файл в Scala Spark?

К сожалению, приведенный ниже измененный код не прочитал все столбцы в excel.

val df = spark.read.format("com.crealytics.spark.excel")
      .option("sheetName", "Sheet1") // Required
      .option("useHeader", "false") // Required
      .option("treatEmptyValuesAsNulls", "false") // Optional, default: true
      .option("inferSchema", "true") // Optional, default: false
      .option("addColorColumns", "false") // Optional, default: false
      .option("startColumn", 0) // Optional, default: 0
      .option("endColumn", 99) // Optional, default: Int.MaxValue
      .option("timestampFormat", "MM-dd-yyyy HH:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss[.fffffffff]
      .option("maxRowsInMemory", 20) // Optional, default None. If set, uses a streaming reader which can help with big files
      .option("excerptSize", 10) // Optional, default: 10. If set and if schema inferred, number of rows to infer schema from
      .option("path", excelFile)
      //.schema(customSchema)
      .load()

+---+---+--------------+---+---+
|_c0|_c1|           _c2|_c3|_c4|
+---+---+--------------+---+---+
|   |   |Test Profile 1|  A|123|
|   |   |Test Profile 2|  B|   |
|   |   |Test Profile 3|  C|   |
|   |   |Test Profile 4|  D|   |
|   |   |Test Profile 5|  E|   |
|   |   |Test Profile 6|  F|   |
+---+---+--------------+---+---+

Я что-то здесь упускаю?

Моя цель - получить все данные из листа, который распределяется случайным образом, а затем извлечь из него конкретные значения.Некоторые ячейки могут быть пустыми.

Я могу сделать это в Scala, используя Apache Poi, получить необходимые значения, преобразовать в CSV и затем загрузить в dataframe.

Однако я ищуспособ разбора таблицы Excel непосредственно в фрейм данных с использованием scala, итерации по строкам фреймов данных и применения условий для получения необходимых строк / столбцов.

ps Извините, я не знал, как прикрепить файл excel с моего локального компьютера.

Спасибо!

1 Ответ

0 голосов
/ 11 июня 2018

Если вы изучите исходный код crealytics spark excel , вы обнаружите, что номера столбцов определены в первой строке со значением.И первая строка со значением в вашем файле Excel имеет столбцы файла, поэтому последний столбец, который имеет значение в других столбцах, а не в первой строке со значением, игнорируется.

Решением этой проблемы будет определениеПользовательская схема и передать ее в Framework как

val customSchema = StructType(Seq(
  StructField("col0", StringType, true),
  StructField("col1", StringType, true),
  StructField("col2", StringType, true),
  StructField("col3", StringType, true),
  StructField("col4", IntegerType, true),
  StructField("col5", IntegerType, true)
  ))
val df = spark.read.format("com.crealytics.spark.excel")
  .option("sheetName", "Sheet1") // Required
  .option("useHeader", "false") // Required
  .option("treatEmptyValuesAsNulls", "false") // Optional, default: true
  .option("inferSchema", "true") // Optional, default: false
  .option("addColorColumns", "false") // Optional, default: false
  .option("startColumn", 0) // Optional, default: 0
  .option("endColumn", 99) // Optional, default: Int.MaxValue
  .option("timestampFormat", "MM-dd-yyyy HH:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss[.fffffffff]
  .option("maxRowsInMemory", 20) // Optional, default None. If set, uses a streaming reader which can help with big files
  .option("excerptSize", 10) // Optional, default: 10. If set and if schema inferred, number of rows to infer schema from
  .option("path", excelFile)
  .schema(customSchema)
  .load()

, и у вас должно быть следующее dataframe

+----+----+--------------+----+----+----+
|col0|col1|col2          |col3|col4|col5|
+----+----+--------------+----+----+----+
|null|null|Test Profile 1|A   |123 |null|
|null|null|Test Profile 2|B   |null|null|
|null|null|Test Profile 3|C   |null|345 |
|null|null|Test Profile 4|D   |null|null|
|null|null|Test Profile 5|E   |null|null|
|null|null|Test Profile 6|F   |null|null|
+----+----+--------------+----+----+----+

Надеюсь, ответ полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...