Nombres de columna de partición en conflicto detectados Pyspark Databricks

Estoy tratando de leer un archivo csv con pyspark en databricks. marketing Comienzo Fecha es este formato yyyyMMdd y lastweek = marketingStartDate -7days

readFactToDataFrame('Facts', 
'Fact.csv',startDate=str(dateBefore),
           endDate=str(marketingStartDate),
           inferSchema=False)

Estoy recibiendo este mensaje de error. ¿Tienes idea de dónde está el problema?

enter image description here

df = spark.read.format(fileFormat).options(header=True, inferSchema=
inferSchema, delimiter = columnDelimiter).load(URL).filter("Year *
10000 + Month * 100 + Day = "+str(startDate) + " AND Year * 10000 +
Month * 100 + Day <=" + str(endDate)) 37 elif fileFormat == "json": 38
df =
spark.read.format(fileFormat).options(multiline=True).load(URL).filter("Year
* 10000 + Month * 100 + Day = "+str(startDate) + " AND Year * 10000 + Month * 100 + Day <=" + str(endDate))
/databricks/spark/python/pyspark/sql/readwriter.py in load(self, path,
format, schema, **options) 164 self.options(**options) 165 if
isinstance(path, basestring): -- 166 return
self._df(self._jreader.load(path)) 167 elif path is not None: 168 if
type(path) != list:
/databricks/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py
in __call__(self, *args) 1255 answer =
self.gateway_client.send_command(command) 1256 return_value =
get_return_value( - 1257 answer, self.gateway_client, self.target_id,
self.name) 1258 1259 for temp_arg in temp_args:
/databricks/spark/python/pyspark/sql/utils.py in deco(*a, **kw) 61 def
deco(*a, **kw): 62 try: --- 63 return f(*a, **kw) 64 except
py4j.protocol.Py4JJavaError as e: 65 s = e.java_exception.toString()
/databricks/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py in
get_return_value(answer, gateway_client, target_id, name) 326 raise
Py4JJavaError( 327 "An error occurred while calling {0}{1}{2}.\n". --
328 format(target_id, ".", name), value) 329 else: 330 raise
Py4JError( Py4JJavaError: An error occurred while calling o2301.load.
: java.lang.AssertionError: assertion failed: Conflicting partition
column names detected: Partition column name list #0: Year, Month, Day
Partition column name list #1: Year, Month For partitioned table
directories, data files should only live in leaf directories. And
directories at the same level should have the same partition column
name. Please check the following directories for unexpected files or
inconsistent partition column names:
dbfs:/mnt/DL/Facts/Year=2020/Month=08
dbfs:/mnt/DL/Facts/Year=2020/Month=03/Day=16
dbfs:/mnt/DL/Facts/Year=2019/Month=09/Day=27
dbfs:/mnt/DL/Facts/Year=2019/Month=09/Day=02
dbfs:/mnt/DL/Facts/Year=2020/Month=08/Day=01
dbfs:/mnt/DL/Facts/Year=2020/Month=03/Day=09
dbfs:/mnt/DL/Facts/Year=2020/Month=02/Day=26
dbfs:/mnt/DL/Facts/Year=2020/Month=08/Day=10
dbfs:/mnt/DL/Facts/Year=2019/Month=09/Day=12
dbfs:/mnt/DL/Facts/Year=2019/Month=10/Day=12
dbfs:/mnt/DL/Facts/Year=2020/Month=03/Day=24
dbfs:/mnt/DL/Facts/Year=2019/Month=09/Day=05
dbfs:/mnt/DL/Facts/Year=2020/Month=03/Day=13
dbfs:/mnt/DL/Facts/Year=2019/Month=10/Day=27
dbfs:/mnt/DL/Facts/Year=2019/Month=09/Day=16
dbfs:/mnt/DL/Facts/Year=2020/Month=02/Day=20
dbfs:/mnt/DL/Facts/Year=2020/Month=03/Day=31 at
scala.Predef$.assert(Predef.scala:170) at
org.apache.spark.sql.execution.datasources.PartitioningUtils$.resolvePartitions(PartitioningUtils.scala:396)
at
org.apache.spark.sql.execution.datasources.PartitioningUtils$.parsePartitions(PartitioningUtils.scala:197)
at
org.apache.spark.sql.execution.datasources.PartitioningUtils$.parsePartitions(PartitioningUtils.scala:132)

Pregunta hecha hace 3 años, 4 meses, 29 días - Por pixelprodigy50bb


3 Respuestas:

  • El error siguiente es lanzado debido a la ubicación de la fuente dbfs:/mnt/DL/Facts tiene dos estructura de partición diferente.

         java.lang.AssertionError: assertion failed: Conflicting partition column names detected: 
    Partition column name list #0: Year, Month, Day 
    Partition column name list #1: Year, Month
    

    Los datos de error apuntan al directorio problemático:

    dbfs:/mnt/DL/Facts/Year=2020/Month=08
    

    Inspeccione el directorio de databricks para ver si hay archivos en esta ubicación. Puedes eliminarlos o moverte a otro directorio. Si no hay archivos en el directorio anterior, puede eliminar el directorio en sí.

    Espero que ayude a solucionar este problema.

    Respondida el Dec 17, 2020 a las 07:45 - por pixelprodigy50bb

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás viendo se debe a que Spark está tratando de leer un conjunto de datos que tiene particiones (partitions) y parece haber una inconsistencia en las columnas de partición entre los distintos directorios donde se encuentran los datos.

    En el error se menciona que se detectaron nombres de columna de partición en conflicto. Por ejemplo, en un directorio las particiones pueden estar definidas por Year, Month y Day, mientras que en otro directorio solo por Year y Month. Spark espera que todas las particiones tengan las mismas columnas y en el mismo orden para poder leer los datos correctamente.

    Para resolver este error, puedes hacer lo siguiente:

    • Asegúrate de limpiar los directorios donde se encuentran los datos de modo que solo queden aquellos directorios necesarios y consistentes en términos de las columnas de partición.
    • Verifica que el esquema de partición en todos los directorios sea consistente y que todas las columnas de partición coincidan.
    • Recarga los datos después de hacer estos cambios y asegurarte de que Spark pueda leerlos correctamente.

    Revisa los directorios que se mencionan en el error y asegúrate de que las columnas de partición sean consistentes en todos ellos. Una vez que hayas arreglado la consistencia en las particiones, podrás volver a leer tus datos sin problemas.

    Respondida el Dec 18, 2020 a las 07:45 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error indica que hay un conflicto en los nombres de las columnas de partición. Específicamente, se han detectado dos listas de nombres de columnas de partición:

    Lista 0: Año, Mes, Día Lista 1: Año, Mes

    Para las tablas particionadas, se espera que los archivos de datos solo residan en directorios hoja. Además, se espera que los directorios del mismo nivel tengan los mismos nombres de columnas de partición.

    El error proporciona una lista de directorios que contienen archivos o nombres de columnas de partición inconsistentes. Revisa estos directorios para identificar cualquier archivo inesperado o inconsistencia en los nombres de las columnas de partición.

    Para resolver este problema, debes asegurarte de que todas las columnas de partición tengan los mismos nombres y que los archivos de datos residan en los directorios correctos según los nombres de las columnas de partición.

    Aquí hay algunos pasos que puedes seguir para depurar este problema:

    • Examina los directorios enumerados en el mensaje de error: Revisa los directorios mencionados en el mensaje de error para ver si hay archivos inesperados o inconsistencias en los nombres de las columnas de partición.
    • Verifica el esquema de los datos: Asegúrate de que el esquema de los datos coincida con el esquema esperado para las tablas particionadas. Esto incluye verificar los tipos de datos y los nombres de las columnas de partición.
    • Comprueba la configuración de partición: Verifica la configuración de partición en el código de lectura para asegurarte de que coincida con el esquema de los datos y la estructura del directorio.
    • Limpia los datos: Si hay archivos o directorios incorrectos, elimínalos o muévelos a ubicaciones adecuadas.
    • Vuelve a cargar los datos: Una vez que hayas resuelto los problemas, vuelve a cargar los datos en la tabla particionada.

    Recuerda que los directorios de datos particionados deben organizarse jerárquicamente según los valores de las columnas de partición. Por ejemplo, si la tabla está particionada por año y mes, los archivos de datos deben estar organizados en directorios como /año=2023/mes=03.

    Respondida el Dec 18, 2020 a las 07:57 - por Gemini

    Votos positivos: 0 | Votos negativos: 0