Saltar al contenido

¿Cómo construir un marco de datos a partir de un archivo de Excel (xls, xlsx) en Scala Spark?

Siéntete en la libertad de compartir nuestra página y códigos con tus amigos, danos de tu ayuda para hacer crecer esta comunidad.

Solución:

La solución a su problema es usar Spark Excel dependencia en su proyecto.

Spark Excel tiene flexibilidad options jugar con.

He probado el siguiente código para leer de excel y convertirlo a dataframe y simplemente funciona perfecto

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)

puedes dar sheetname como option si su hoja de Excel tiene varias hojas

.option("sheetName", "Sheet2")

Espero que sea útil

Aquí están leer y escribe ejemplos para leer y escribir en excel con un conjunto completo de opciones...

Fuente chispa-excel de crealytics

Chispa API Scala 2.0+:

Crear un marco de datos a partir de un archivo de Excel

    import org.apache.spark.sql._

val spark: SparkSession = ???
val df = spark.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")

Escribir un marco de datos en un archivo de 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")

Nota: en lugar de hoja1 o hoja2, también puede usar sus nombres … en este ejemplo anterior A diario es el nombre de la hoja.

  • Si quieres usarlo desde Spark Shell…

Este paquete se puede agregar a Spark usando el --packages opción de línea de comando. Por ejemplo, para incluirlo al iniciar el Spark Shell:

    $SPARK_HOME/bin/spark-shell --packages com.crealytics:spark-excel_2.11:0.13.1

  • Es necesario agregar dependencias (en caso de maven, etc.):
groupId: com.crealytics
artifactId: spark-excel_2.11
version: 0.13.1

Lectura adicional: vea mi artículo (¿Cómo hacer informes simples con hojas de Excel usando Apache Spark, Scala?) de cómo escribir en un archivo de Excel después de una agregación en muchas hojas de Excel

Propina : Este es un enfoque muy útil, particularmente para escribir casos de prueba maven donde puede colocar hojas de Excel con datos de muestra en Excel
src/main/resources y puede acceder a ellos en los casos de prueba de su unidad (scala/java), lo que crea DataFrame[s] fuera de la hoja de excel…

  • Otra opción que podría considerar es spark-hadoopoffice-ds

Una fuente de datos de Spark para la biblioteca de HadoopOffice. Esta fuente de datos de Spark asume al menos Spark 2.0.1. Sin embargo, la biblioteca de HadoopOffice también se puede usar directamente desde Spark 1.x. Actualmente, esta fuente de datos admite los siguientes formatos de la biblioteca de HadoopOffice:

Formato de fuente de datos de Excel: org.zuinnote.spark.office.Excel Carga y guardado de Excel antiguo (.xls) y Excel nuevo (.xlsx) Esta fuente de datos está disponible en Spark-packages.org y en Maven Central.

Alternativamente, puede usar la biblioteca de HadoopOffice (https://github.com/ZuInnoTe/hadoopoffice/wiki), que también admite documentos de Excel cifrados y libros de trabajo vinculados, entre otras funciones. Por supuesto, Spark también es compatible.

Eres capaz de corroborar nuestra publicación mostrando un comentario o dejando una puntuación te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *