Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Supera il limite di dimensione del blocco di codice di 68k
Athena for Spark ha un limite noto di dimensione del blocco del codice di calcolo di 68000 caratteri. Quando esegui un calcolo con un blocco di codice superiore a questo limite, puoi ricevere il seguente messaggio di errore:
'...' at codeBlock 'non ha soddisfatto il vincolo: il membro deve avere una lunghezza inferiore o uguale a 68000
L'immagine seguente mostra questo errore nell'editor di notebook della console Athena.
Lo stesso errore può verificarsi quando si utilizza il AWS CLI per eseguire un calcolo con un blocco di codice di grandi dimensioni, come nell'esempio seguente.
aws athena start-calculation-execution \ --session-id "
{SESSION_ID}
" \ --description "{SESSION_DESCRIPTION}
" \ --code-block "{LARGE_CODE_BLOCK}
"
Il comando restituisce il seguente messaggio di errore:
{LARGE_CODE_BLOCK}
in «codeBlock» non è riuscito a soddisfare il vincolo: il membro deve avere una lunghezza inferiore o uguale a 68000
Soluzione alternativa
Per risolvere il problema, carica il file contenente la query o il codice di calcolo su Amazon S3. Quindi, usa boto3 per leggere il file ed eseguire il tuo codice or. SQL
Gli esempi seguenti presuppongono che tu abbia già caricato il file contenente la tua SQL query o il codice Python su Amazon S3.
SQLesempio
Il codice di esempio seguente legge il file large_sql_query.sql
da un bucket Amazon S3 e quindi esegue la query di grandi dimensioni che il file contiene.
s3 = boto3.resource('s3') def read_s3_content(
bucket_name
,key
): response = s3.Object(bucket_name
,key
).get() return response['Body'].read() # SQL sql = read_s3_content('bucket_name
', 'large_sql_query.sql') df = spark.sql(sql)
PySpark esempio
Il seguente esempio di codice legge il file large_py_spark.py
da Amazon S3 e quindi esegue il blocco di codice di grandi dimensioni contenuto nel file.
s3 = boto3.resource('s3') def read_s3_content(
bucket_name
,key
): response = s3.Object(bucket_name
,key
).get() return response['Body'].read() # PySpark py_spark_code = read_s3_content('bucket_name
', 'large_py_spark.py') exec(py_spark_code)