

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 访问 Spark Shell
<a name="emr-spark-shell"></a>

Spark Shell 基于 Scala REPL (Read-Eval-Print-Loop)。它让您能够以交互方式创建 Spark 程序并将工作提交到框架。您可以通过 SSH 连接主节点并调用 `spark-shell`，从而访问 Spark Shell。有关如何连接到主节点的更多信息，请参阅《Amazon EMR 管理指南**》中的[使用 SSH 连接到主节点](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)。以下示例使用存储在 Amazon S3 中的 Apache HTTP Server 访问日志。

**注意**  
这些示例中的存储桶对能够访问美国东部（弗吉尼亚州北部）的客户端可用。

 默认情况下，Spark 外壳会创建自己的名为的[SparkContext](https://spark.apache.org/docs/latest/api/scala/org/apache/spark/SparkContext.html)对象`sc`。如果 REPL 中需要此上下文，则可以使用此上下文。 sqlContext也有外壳可供选择，它是 [HiveContext](https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.hive.HiveContext).

**Example 使用 Spark Shell 统计存储在 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 Shell 统计存储在 Amazon S3 中的某个文件中的某个字符串的出现次数**  
Spark 还包含一个基于 Python 的 Shell `pyspark`，您可以用它来设计以 Python 编写的 Spark 程序的原型。就像在主节点`pyspark`上调用一样；它也有相同的[SparkContext](https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkContext.html#pyspark.SparkContext)对象。`spark-shell`  

```
>>> 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
```