es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

spark.read.excel – No lee todas las filas de Excel al usar un esquema personalizado

Estoy tratando de leer un DataFrame de Spark a partir de un archivo ‘excel’. Utilicé la dependencia crealytics.

Sin ningún esquema predefinido, todas las filas se leen correctamente, pero solo como columnas de tipo string.

Para evitar eso, estoy utilizando mi propio esquema (donde indiqué que ciertas columnas son de tipo entero), pero en este caso, se eliminan la mayoría de las filas cuando se lee el archivo.

La dependencia de la biblioteca utilizada en build.sbt:

"com.crealytics" %% "spark-excel" % "0.11.1",

Versión de Scala: 2.11.8
Versión de Spark: 2.3.2

<code>
</code>
val inputDF = sparkSession.read.excel(useHeader = true).load(inputLocation(0))

La anterior lee todos los datos, alrededor de 25000 filas.

Pero,

val inputWithSchemaDF: DataFrame = sparkSession.read
   .format("com.crealytics.spark.excel")
   .option("useHeader", "false")
   .option("inferSchema", "false")
   .option("addColorColumns", "true")
   .option("treatEmptyValuesAsNulls", "false")
   .option("keepUndefinedRows", "true")
   .option("maxRowsInMey", 2000)
   .schema(templateSchema)
   .load(inputLocation)

Esto me da solo 450 filas.
¿Hay alguna manera de evitar eso? ¡Gracias de antemano!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de evitar la eliminación de filas al utilizar un esquema personalizado en Spark DataFrame. Debes asegurarte de que el esquema que estás proporcionando coincida exactamente con el esquema real de los datos en el archivo de Excel.

    Cuando especifiques el templateSchema en tu código, asegúrate de que los nombres de columna y los tipos de datos coincidan exactamente con los datos en tu archivo de Excel. Si hay alguna discrepancia, entonces las filas se eliminarán durante el proceso de lectura.

    También verifica si hay valores nulos en las columnas que estás especificando como tipo Integer. Si hay valores nulos, entonces esas filas también se eliminarán.

    Puedes utilizar la opción option("nullValue", "") para tratar los valores vacíos como nulos, de manera que esas filas no sean eliminadas.

    Por último, asegúrate de que la opción maxRowsInMey esté configurada con un valor adecuado para que se lean todas las filas requeridas.

    Siguiendo estos pasos, puedes evitar la eliminación de filas al leer un Spark DataFrame desde un archivo de Excel con un esquema personalizado.

Comments are closed.