

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

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

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

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

![\[Athena 笔记本编辑器中的代码块大小错误消息\]](http://docs.aws.amazon.com/zh_cn/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}"
```

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

“codeBlock”中的 *\$1LARGE\$1CODE\$1BLOCK\$1* 无法满足约束条件：成员长度必须小于或等于 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)
```