本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
克服 68k 程式碼區塊大小限制
Athena for Spark 的已知計算程式碼區塊大小限制為 68000 個字元。當您使用超過此限制的程式碼區塊執行計算時,您可能會收到下列錯誤訊息:
'...' at codeBlock '無法滿足限制:成員的長度必須小於或等於 68000
下圖顯示了 Athena 主控台筆記本編輯器中的此錯誤。
使用時可能會發生相同的錯誤 AWS CLI 執行具有大型程式碼區塊的計算,如下列範例所示。
aws athena start-calculation-execution \ --session-id "
{SESSION_ID}
" \ --description "{SESSION_DESCRIPTION}
" \ --code-block "{LARGE_CODE_BLOCK}
"
該命令會提供以下錯誤訊息:
{LARGE_CODE_BLOCK}
在 'codeBlock' 無法滿足限制條件:成員的長度必須小於或等於 68000
解決方法
若要解決此問題,請將具有您的查詢或計算程式碼的檔案上傳至 Amazon S3。然後,使用 boto3 讀取文件並運行您的SQL或代碼。
下列範例假設您已將具有SQL查詢或 Python 程式碼的檔案上傳到 Amazon S3。
SQL例子
下列範例程式碼會從 Amazon S3 儲存貯體讀取 large_sql_query.sql
檔案,然後執行檔案包含的大型查詢。
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 例子
下列程式碼範例會從 Amazon S3 讀取 large_py_spark.py
檔案,然後執行檔案中的大型程式碼區塊。
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)