Как построить фрейм данных из файла Excel (xls,xlsx) в Scala Spark?
у меня большой Excel(xlsx and xls)
файл с несколькими листами, и мне нужно преобразовать его в RDD
или Dataframe
, Так что он может быть присоединен к другой dataframe
позже. Я думал об использовании Apache POI и сохраните его как CSV
а потом читать csv
на dataframe
. Но если есть какие-либо библиотеки или API, которые могут помочь в этом процессе, будет легко. Любая помощь высоко ценится.
3 ответов
решение вашей проблемы заключается в использовании Spark Excel
зависимостей в вашем проекте.
Искра Excel гибкий options
чтобы играть.
я протестировал следующий код для чтения из excel
и преобразовать его в dataframe
и все работает отлично
def readExcel(file: String): DataFrame = sqlContext.read
.format("com.crealytics.spark.excel")
.option("location", file)
.option("useHeader", "true")
.option("treatEmptyValuesAsNulls", "true")
.option("inferSchema", "true")
.option("addColorColumns", "False")
.load()
val data = readExcel("path to your excel file")
data.show(false)
вы можете дать sheetname
as option
если ваш лист Excel имеет несколько листов
.option("sheetName", "Sheet2")
Я надеюсь, что его полезным
здесь читать и написать примеры для чтения и записи в Excel С полным набором опций...
источник spark-excel от crealytics
Скала API-интерфейс СПАРК 2.0+:
создайте фрейм данных из файла Excel
import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val df = sqlContext.read
.format("com.crealytics.spark.excel")
.option("sheetName", "Daily") // Required
.option("useHeader", "true") // Required
.option("treatEmptyValuesAsNulls", "false") // Optional, default: true
.option("inferSchema", "false") // Optional, default: false
.option("addColorColumns", "true") // 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
.schema(myCustomSchema) // Optional, default: Either inferred schema, or all columns are Strings
.load("Worktime.xlsx")
напишите фрейм данных в файл Excel
df.write
.format("com.crealytics.spark.excel")
.option("sheetName", "Daily")
.option("useHeader", "true")
.option("dateFormat", "yy-mmm-d") // Optional, default: yy-m-d h:mm
.option("timestampFormat", "mm-dd-yyyy hh:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss.000
.mode("overwrite")
.save("Worktime2.xlsx")
Примечание: вместо sheet1 или sheet2 вы также можете использовать их имена.. в этом примере, приведенном выше ежедневно - это имя листа.
- если вы хотите использовать его из spark shell...
этот пакет может быть добавлен в Spark с помощью командная строка. Например, чтобы включить его при запуске оболочки spark:
$SPARK_HOME/bin/spark-shell --packages com.crealytics:spark-excel_2.11:0.9.8
- необходимо добавить зависимости (в случае maven так далее...):
groupId: com.crealytics artifactId: spark-excel_2.11 version: 0.9.8
Совет : это очень полезный подход, особенно для написания тестовые примеры maven, в которых можно разместить листы excel с образцами данных в excel
src/main/resources
папка, и вы можете получить к ним доступ в ваших тестовых случаях(scala/java), который создаетDataFrame
[s] из листа excel...
- другой вариант, который вы могли бы рассмотреть spark-hadoopoffice-ds
источник данных Spark для библиотеки HadoopOffice. Этот источник данных Spark предполагает хотя бы искру 2.0.1. Однако библиотека HadoopOffice может также используйте сразу от искры 1.х. В настоящее время этот источник данных поддерживает следующие форматы библиотеки HadoopOffice:
формат источника данных Excel:
org.zuinnote.spark.office.Excel
загрузка и Сохранение старого Excel (.xls) и новый Excel (.xlsx) этот источник данных доступно на Spark-packages.org и далее Maven Central.
кроме того, вы можете использовать библиотеку HadoopOffice (https://github.com/ZuInnoTe/hadoopoffice/wiki), который поддерживает также зашифрованные документы Excel и связанные книги, среди других функций. Конечно, Spark также поддерживается.