访问 Spark Shell - Amazon EMR

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

访问 Spark Shell

Spark Shell 基于 Scala REPL (Read-Eval-Print-Loop)。它让您能够以交互方式创建 Spark 程序并将工作提交到框架。您可以通过 SSH 连接主节点并调用 spark-shell,从而访问 Spark Shell。有关如何连接到主节点的更多信息,请参阅《Amazon EMR 管理指南》中的使用 SSH 连接到主节点。以下示例使用存储在 Amazon S3 中的 Apache HTTP Server 访问日志。

注意

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

默认情况下,Spark 外壳会创建自己的名为的SparkContext对象sc。如果 REPL 中需要此上下文,则可以使用此上下文。 sqlContext也有外壳可供选择,它是 HiveContext.

例 使用 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-2009-04-13-08-05.log")

Spark 创建 textFile 及关联的数据结构。然后,示例会统计此日志文件中包含字符串“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
例 使用基于 Python 的 Spark Shell 统计存储在 Amazon S3 中的某个文件中的某个字符串的出现次数

Spark 还包含一个基于 Python 的 Shell pyspark,您可以用它来设计以 Python 编写的 Spark 程序的原型。就像在主节点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-2009-04-13-08-05.log")

Spark 创建 textFile 及关联的数据结构。然后,示例会统计此日志文件中包含字符串“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