

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Spark 쉘에 액세스
<a name="emr-spark-shell"></a>

Spark 쉘은 Scala REPL (Read-Eval-Print-Loop)을 기반으로 합니다. Scala REPL을 사용하면 Spark 프로그램을 대화식으로 생성하고 작업을 프레임워크로 제출할 수 있습니다. 프라이머리 노드를 SSH에 연결하고 `spark-shell`을 간접 호출하여 Spark 쉘에 액세스할 수 있습니다. SSH를 사용하여 프라이머리 노드에 연결하는 방법에 대한 자세한 내용은 *Amazon EMR 관리 안내서*에서 [SSH를 사용하여 프라이머리 노드에 연결](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)을 참조하세요. 다음 예제에서는 Amazon S3에 저장된 Apache HTTP Server 액세스 로그가 사용됩니다.

**참고**  
이러한 예제의 Amazon 버킷은 미국 동부(버지니아 북부)에 액세스할 수 있는 클라이언트에서 사용 가능합니다.

 기본적으로 Spark 쉘은 `sc`라는 자체 [SparkContext](https://spark.apache.org/docs/1.3.1/api/scala/index.html#org.apache.spark.SparkContext) 객체를 생성합니다. REPL 내에서 필요한 경우 이 컨텍스트를 사용할 수 있습니다. 또한 sqlContext도 이 쉘에서 사용할 수 있으며, [HiveContext](https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.hive.HiveContext)입니다.

**Example Spark 쉘을 사용하여 Amazon S3에 저장된 파일에서 특정 문자열의 발생 개수 계산**  
이 예제에서는 `sc`를 사용하여 Amazon S3에 저장된 텍스트 파일을 읽습니다.  

```
scala> sc
res0: org.apache.spark.SparkContext = org.apache.spark.SparkContext@404721db

scala> val textFile = sc.textFile("s3://elasticmapreduce/samples/hive-ads/tables/impressions/dt=2009-04-13-08-05/ec2-0-51-75-39.amazon.com.rproxy.govskope.ca-2009-04-13-08-05.log")
```
Spark에서 textFile 및 관련 [데이터 구조](https://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds)가 생성됩니다. 그 다음, 이 예제는 로그 파일에서 "cartoonnetwork.com" 문자열이 나오는 행 수를 셉니다.  

```
scala> val linesWithCartoonNetwork = textFile.filter(line => line.contains("cartoonnetwork.com")).count()
linesWithCartoonNetwork: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at filter at <console>:23
<snip>
<Spark program runs>
scala> linesWithCartoonNetwork
res2: Long = 9
```

**Example Python 기반 Spark 쉘을 사용하여 Amazon S3에 저장된 파일에서 특정 문자열의 발생 개수 계산**  
Spark에는 Python 기반 셸인 `pyspark`도 포함되어 있으며, 이 셸을 사용하여 Python에서 작성된 Spark 프로그램을 시제품화할 수 있습니다. `spark-shell`과 마찬가지로, 프라이머리 노드에서 `pyspark`를 간접 호출합니다. 이 쉘에도 동일한 [SparkContext](https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkContext.html#pyspark.SparkContext) 객체가 있습니다.  

```
>>> sc
<pyspark.context.SparkContext object at 0x7fe7e659fa50>
>>> textfile = sc.textFile("s3://elasticmapreduce/samples/hive-ads/tables/impressions/dt=2009-04-13-08-05/ec2-0-51-75-39.amazon.com.rproxy.govskope.ca-2009-04-13-08-05.log")
```
Spark에서 textFile 및 관련 [데이터 구조](https://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds)가 생성됩니다. 그 다음, 이 예제는 로그 파일에서 "cartoonnetwork.com" 문자열이 나오는 행 수를 셉니다.  

```
>>> linesWithCartoonNetwork = textfile.filter(lambda line: "cartoonnetwork.com" in line).count()
15/06/04 17:12:22 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library from the embedded binaries
15/06/04 17:12:22 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev EXAMPLE]
15/06/04 17:12:23 INFO fs.EmrFileSystem: Consistency disabled, using com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem as filesystem implementation
<snip>
<Spark program continues>
>>> linesWithCartoonNetwork
9
```