

# 克服 68k 代码块大小限制
<a name="notebooks-spark-troubleshooting-code-block-size-limit"></a>

Athena for Spark 的已知计算代码块大小限制为 68000 个字符。当您运行代码块超过此限制的计算时，可能会收到以下错误消息：

“codeBlock”中的“...”无法满足约束条件：成员长度必须小于或等于 68000

下图显示了 Athena 控制台笔记本编辑器中的此错误。

![Athena 笔记本编辑器中的代码块大小错误消息](http://docs.amazonaws.cn/athena/latest/ug/images/notebooks-spark-troubleshooting-code-block-size-limit-1.png)


当您使用 Amazon CLI 运行包含大型代码块的计算时，可能会出现同样的错误，如以下示例所示。

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

该命令会给出以下错误消息：

“codeBlock”中的 {{{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)
```