Spark核心概念介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

既然你已经在shell里运行了你的第一个Spark代码片段,是时候来学习在shell里面编程的更多细节了。


从上层看,每一个Spark程序都是由一个驱动程序组成,这个驱动程序在集群上发布各种各样的平行操作。驱动程序包含你的应用程序的main函数,定义在集群上的分布式数据集,并且将一些操作作用在这些数据集上。在之前的例子中,驱动程序是Spark shell本身,你只需要在里面输入你想要运行的操作就行了。


驱动程序通过一个SparkContext 对象访问Spark,一个SparkContext 对象代表了一个到计算集群的连接。在shell里,有一个自动为你创建的SparkContext 对象,就是sc变量。试着打印出sc变量来看看它的类型,就像例2-3 那样。

例2-3.  检查sc变量
>>> sc
<pyspark.context.SparkContext object at 0x1025b8f90>


一旦你有了一个SparkContext 对象,你就可以用它来创建RDD。在例2-1和2-2 中,我们调用sc.textFile()来创建了一个RDD, 这个RDD代表了一个文件中的文本行的集合。我们可以在这些行上执行不同的操作,例如count()。


为了运行这些操作,驱动程序管理着一定数量的节点,这些节点被叫做executor 。例如,如果我们在一个集群上运行count() 操作,不同机器可能统计文本不同部分的文本行数。因为我们只是在本地运行Spark shell,所以它在单台机器上执行所有任务,但是你可以连接shell到一个集群来并行地分析数据。Figure 2-3显示了Spark如何在一个集群上运行。

Figure 2-3


最后,当传递函数给操作,并在集群上运行它们的时候,有大量Spark’的API可以考虑。例如,我们扩展README 示例,过滤掉那些不包含某个单词的行,比如单词Python ,具体代码显示在例2-4(Python)和例2-5(for Scala)。

例2-4. Python执行过滤的例子
>>> lines = sc.textFile(“README.md”)
>>> pythonLines = lines.filter(lambda line: “Python” in line)
>>> pythonLines.first()
u’## Interactive Python Shell’


例2-5. Scala执行过滤的例子
scala> val lines = sc.textFile(“README.md”) // 创建一个叫lines的RDD
lines: spark.RDD[String] = MappedRDD[…]
scala> val pythonLines = lines.filter(line => line.contains(“Python”))
pythonLines: spark.RDD[String] = FilteredRDD[…]
scala> pythonLines.first()

res0: String = ## Interactive Python Shell


传递函数给Spark

如果你对例lambda和=>这样的语法不熟悉,你也可以先定义函数,然后再把函数名传递给Spark。例如,在Python中:

def hasPython(line):
      return “Python” in line
pythonLines = lines.filter(hasPython)

在Java中传递函数给Spark也是可能的,但是在这种情况下,它们被定义为类,这些类实现Function接口。例如:

JavaRDD<String> pythonLines = lines.filter(
    new Function<String, Boolean>() {
        Boolean call(String line) { return line.contains(“Python”); }
    }
);

Java8中引入了看起来和Python和Scala中类似的函数简单写法,被称为lambda表达式。用这种语法实现上面的功能的代码如下:

JavaRDD<String> pythonLines = lines.filter(line -> line.contains(“Python”));

我们将在“Passing Functions to Spark”一节更加深入的讨论这个话题。


后面我们会讲述Spark API更多的细节,Spark这样神奇,只因为像filter这样的函数操作也是在整个集群上并行的执行的。也就是说,Spark自动获得你的函数(比如,line.contains(“Python”)),把它们传送到执行节点上。因此,你可以在单个驱动程序中写代码,然后让代码运行在多个节点上。第三章将更细致的讲解RDD API 。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
Spark是一种快速数据分析工具,它通过分布式计算和内存计算的方式,实现了快速高效的数据处理和分析。 Spark提供了一种更加灵活和简单的编程模型,可以让开发人员更加方便地处理大规模的数据集。它支持多种编程语言,如Java、Scala和Python,可以根据用户的需求和喜好进行选择。 Spark具有很高的性能和可扩展性。它使用了内存计算技术,能够将数据存储在内存中进行计算,从而提高了计算速度。同时,Spark还支持分布式计算,可以将计算任务分散到多台机器上进行并行处理,进一步提高了处理数据的效率。 Spark还提供了丰富的内置函数和算法库,可以进行各种常见的数据操作和分析,如数据清洗、数据聚合、机器学习等。这些函数和算法已经被广泛应用于各个行业和领域,可以帮助用户快速地进行数据探索和挖掘。 除了数据处理和分析,Spark还支持流式处理和图计算等高级功能。它可以处理实时数据流,实时地进行数据计算和分析,适用于需要快速响应和实时决策的场景。同时,Spark还支持图计算,可以进行图结构的数据挖掘和分析,如社交网络分析和推荐系统等。 总之,Spark是一个强大的数据分析工具,具有快速高效、灵活简单、可扩展性强等特点。它已经被广泛应用于大数据领域,成为许多企业和机构进行数据处理和分析的首选工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值