

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 克服 68k 程式碼區塊大小限制
<a name="notebooks-spark-troubleshooting-code-block-size-limit"></a>

Athena for Spark 的已知計算程式碼區塊大小限制為 68000 個字元。當您使用超過此限制的程式碼區塊執行計算時，您可能會收到下列錯誤訊息：

「程式碼區塊」的 '...' 無法滿足限制條件：成員的長度必須小於或等於 68000

下圖顯示了 Athena 主控台筆記本編輯器中的此錯誤。

![Athena 筆記本編輯器中的程式碼區塊大小錯誤訊息](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/notebooks-spark-troubleshooting-code-block-size-limit-1.png)


當您使用 AWS CLI 執行具有大型程式碼區塊的計算時，可能會發生相同的錯誤，如下列範例所示。

```
aws athena start-calculation-execution \ 
    --session-id "{{{SESSION_ID}}}" \ 
    --description "{{{SESSION_DESCRIPTION}}}" \ 
    --code-block "{{{LARGE_CODE_BLOCK}}}"
```

該命令會提供以下錯誤訊息：

「程式碼區塊」的 {{{LARGE\_CODE\_BLOCK}}} 無法滿足限制條件：成員的長度必須小於或等於 68000

## 解決方法
<a name="notebooks-spark-troubleshooting-code-block-size-limit-workaround"></a>

若要解決此問題，請將具有您的查詢或計算程式碼的檔案上傳至 Amazon S3。然後，使用 boto3 讀取檔案並執行 SQL 或程式碼。

下列範例假設，您已將具有 SQL 查詢或 Python 程式碼的檔案上傳至 Amazon S3。

### SQL 範例
<a name="notebooks-spark-troubleshooting-code-block-size-limit-sql-example"></a>

下列範例程式碼會從 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 範例
<a name="notebooks-spark-troubleshooting-code-block-size-limit-pyspark-example"></a>

下列程式碼範例會從 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)
```