Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Más información sobre los problemas conocidos en Athena para Spark

Modo de enfoque
Más información sobre los problemas conocidos en Athena para Spark - Amazon Athena

Esta página documenta algunos de los problemas conocidos de Athena para Apache Spark.

Excepción de argumento ilegal al crear una tabla

Aunque Spark no permite crear bases de datos con una propiedad de ubicación vacía, las bases de datos en AWS Glue pueden tener una propiedad LOCATION vacía si se crean fuera de Spark.

Si crea una tabla y especifica una base de datos de AWS Glue que tiene un campo LOCATION vacío, puede producirse una excepción como la siguiente: IllegalArgumentException: Cannot create a path from an empty string. (IllegalArgumentException: no se puede crear una ruta a partir de una cadena vacía).

Por ejemplo, el siguiente comando lanza una excepción si la base de datos predeterminada en AWS Glue contiene un campo LOCATION vacío:

spark.sql("create table testTable (firstName STRING)")

Solución sugerida A: use AWS Glue para agregar una ubicación a la base de datos que está utilizando.

Para agregar una ubicación a una base de datos de AWS Glue
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS Glue en https://console.aws.amazon.com/glue/.

  2. En el panel de navegación, seleccione Databases (Bases de datos).

  3. En la lista de bases de datos, elija la base de datos que desea editar.

  4. En la página de detalles de la base de datos, elija Edit (Editar).

  5. En la página Update a database (Actualizar una base de datos), en Location (Ubicación), ingrese una ubicación de Amazon S3.

  6. Elija Update Database (Actualizar base de datos).

Solución sugerida B: use una base de datos de AWS Glue diferente que tenga una ubicación válida y existente en Amazon S3. Por ejemplo, si tiene una base de datos denominada dbWithLocation, use el comando spark.sql("use dbWithLocation") para cambiar a esa base de datos.

Solución sugerida C: cuando use Spark SQL para crear la tabla, especifique un valor para location, como en el siguiente ejemplo.

spark.sql("create table testTable (firstName STRING) location 's3://amzn-s3-demo-bucket/'").

Solución sugerida D: si especificó una ubicación al crear la tabla, pero el problema persiste, asegúrese de que la ruta de Amazon S3 que proporcione tenga una barra diagonal al final. Por ejemplo, el siguiente comando lanza una excepción de argumento ilegal:

spark.sql("create table testTable (firstName STRING) location 's3://amzn-s3-demo-bucket'")

Para corregir este problema, agregue una barra al final de la ubicación (por ejemplo, 's3://amzn-s3-demo-bucket/').

Base de datos creada en una ubicación de grupo de trabajo

Si usa un comando como spark.sql('create database db') para crear una base de datos y no especifica una ubicación para la base de datos, Athena crea un subdirectorio en la ubicación de su grupo de trabajo y usa esa ubicación para la base de datos recién creada.

Problemas con las tablas administradas por Hive en la base de datos de AWS Glue predeterminada

Si la propiedad Location de su base de datos predeterminada en AWS Glue no está vacía y especifica una ubicación válida en Amazon S3, y utiliza Athena para Spark a fin de crear una tabla administrada por Hive en su base de datos de AWS Glue predeterminada, los datos se escriben en la ubicación de Amazon S3 especificada en su grupo de trabajo de Athena para Spark en lugar de en la ubicación especificada en la base de datos de AWS Glue.

Este problema se debe a la forma en que Apache Hive gestiona su base de datos predeterminada. Apache Hive crea datos de tablas en la ubicación raíz del almacén de Hive, que puede ser diferente de la ubicación real predeterminada de la base de datos.

Cuando utiliza Athena para Spark a fin de crear una tabla administrada por Hive en la base de datos predeterminada de AWS Glue, los metadatos de la tabla de AWS Glue pueden apuntar a dos ubicaciones diferentes. Esto puede provocar un comportamiento inesperado al intentar realizar una operación INSERT o DROP TABLE.

Los pasos para reproducir el problema son los siguientes:

  1. En Athena para Spark, utilice uno de los siguientes métodos para crear o guardar una tabla administrada por Hive:

    • Una instrucción SQL como CREATE TABLE $tableName.

    • Un comando de PySpark como df.write.mode("overwrite").saveAsTable($tableName) que no especifica la opción path en la API de Dataframe.

    En este punto, es posible que la consola de AWS Glue muestre una ubicación incorrecta en Amazon S3 para la tabla.

  2. En Athena para Spark, utilice la instrucción DROP TABLE $table_name para eliminar la tabla que ha creado.

  3. Tras ejecutar la instrucción DROP TABLE, observará que los archivos subyacentes de Amazon S3 siguen presentes.

Para resolver este problema, siga uno de estos pasos:

Solución A: utilice una base de datos de AWS Glue diferente al crear tablas administradas por Hive.

Solución B: especifique una ubicación vacía para la base de datos predeterminada en AWS Glue. A continuación, cree las tablas administradas en la base de datos predeterminada.

Incompatibilidad de formatos de archivos CSV y JSON entre Athena para Spark y Athena SQL

Debido a un problema conocido con el código abierto de Spark, al crear una tabla en Athena para Spark con datos CSV o JSON, es posible que la tabla no se pueda leer desde Athena SQL y viceversa.

Por ejemplo, puede crear una tabla en Athena para Spark de una de las siguientes maneras:

  • Con la siguiente sintaxis USING csv:

    spark.sql('''CREATE EXTERNAL TABLE $tableName ( $colName1 $colType1, $colName2 $colType2, $colName3 $colType3) USING csv PARTITIONED BY ($colName1) LOCATION $s3_location''')
  • Con la siguiente sintaxis de la API de DataFrame:

    df.write.format('csv').saveAsTable($table_name)

Debido a un problema conocido con el código abierto de Spark, es posible que las consultas de Athena SQL en las tablas resultantes no se realicen correctamente.

Solución sugerida: intente crear la tabla en Athena para Spark con la sintaxis de Apache Hive. Para obtener más información, consulte CREATE HIVEFORMAT TABLE (Crear tabla con formato Hive) en la documentación de Apache Spark.

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.