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!
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.