

# 68,000 というコードブロックサイズの制限に対処する
<a name="notebooks-spark-troubleshooting-code-block-size-limit"></a>

Athena for Spark には、計算コードのブロックサイズの上限が 68,000 文字という既知の制限があります。この制限を超えるコードブロックで計算を実行すると、次のエラーメッセージが表示されることがあります。

「codeBlock」の「...」は制約を満たすことができませんでした。メンバーの長さは 68,000 以下である必要があります

このエラーは、Athena コンソールのノートブックエディターで以下の画像のように表示されます。

![Athena ノートブックエディター上のコードブロックサイズのエラーメッセージ](http://docs.aws.amazon.com/ja_jp/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}}}「codeBlock」の「...」は制約を満たすことができませんでした。メンバーの長さは 68,000 以下である必要があります

## 回避方法
<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)
```