当前位置: 首页 > 科技观察

机器学习实践:Spark与Python如何结合?

时间:2023-03-16 22:32:03 科技观察

ApacheSpark是处理和使用大数据最广泛使用的框架之一,而Python是数据分析、机器学习等领域使用最广泛的编程语言之一。如果你想获得更牛逼的机器学习能力,为什么不将Spark与Python结合使用呢?在国外,ApacheSpark开发人员的平均年薪为11万美元。毫无疑问,Spark在这个行业的应用非常广泛。由于其丰富的库集,Python也被大多数数据科学家和分析专家使用。两者的融合并不难。Spark是用Scala语言开发的,与Java非常相似。它将程序代码编译成JVM字节码,用于Spark大数据处理。为了整合Spark和Python,ApacheSpark社区发布了PySpark。ApacheSpark是由Apache软件基金会开发的用于实时处理的开源集群计算框架。Spark提供了一个接口,用于对具有隐式数据并行性和容错性的整个集群进行编程。以下是ApacheSpark优于其他框架的一些特性:速度:比传统大数据处理框架快100倍。强大的缓存:简单的编程层提供强大的缓存和磁盘持久性。部署:可以通过Mesos、Yarn或者Spark自带的集群管理器进行部署。实时:内存计算,实时计算和低延迟。Polyglot:这是该框架最重要的特性之一,因为它可以用Scala、Java、Python和R进行编程。虽然Spark是用Scala设计的,但它比Python快10倍,但Scala的速度优势仅当使用的核心数量较少时。由于现在大多数分析和处理都需要很多内核,因此Scala的性能优势并不大。对于程序员来说,Python因其丰富的语法和标准库而相对容易学习。此外,它是一种动态类型语言,这意味着RDD可以容纳多种类型的对象。尽管Scala有SparkMLlib,但它没有足够的库和工具用于机器学习和NLP。此外,Scala缺乏数据可视化。使用Python(PySpark)设置Spark从下载并安装Spark开始。解压spark文件后,安装它并将其添加到您的.bashrc文件路径中,您需要键入source.bashrc要打开PySparkshell,您需要键入命令./bin/pysparkPySparkSparkContextanddataflowsusePythontoconnect到Spark,它可以使用RD4s和通过库Py4j来实现。PySparkShell将PythonAPI链接到SparkCore并初始化SparkContext。SparkContext是Spark应用的核心。Spark上下文设置内部服务并建立与Spark执行环境的连接。驱动程序中的SparkContext对象协调所有分布式进程并允许资源分配。集群管理器执行程序,这些程序是具有逻辑的JVM进程。Spark上下文对象将应用程序发送给执行程序。SparkContext在每个执行器中执行任务。PySparkKDD用例下面来看一个用例:数据源为KDD'99Cup(知识发现和数据挖掘工具的国际竞赛,国内也有类似的竞赛开放数据集,比如知乎)。由于原始数据集太大,这里我们将取一部分数据集。创建RDD:现在我们可以使用这个文件来创建我们的RDD。过滤假设我们想计算数据集中有多少正常交互,我们的raw_dataRDD可以被过滤如下。计数:现在我们可以计算新的RDD中有多少个元素。输出:制图:在这种情况下,我们希望将数据文件读取为CSV格式文件。我们可以通过对RDD中的每个元素应用lambda函数来做到这一点。如下所示,这里我们将使用map()和take()转换。输出:拆分:现在,我们要将RDD中的每个元素用作键值对,其中键是标记(例如普通值),值是表示CSV中行的整个元素列表-格式化文件。我们可以如下进行,这里我们使用line.split()和map()。输出:集合:使用collect()操作将RDD的所有元素存储到内存中。因此,在处理大型RDD时必须小心使用。输出:当然,这比我们之前的任何操作都需要更长的时间。每个带有RDD片段的Sparkworker节点必须协调以检索其部分,然后将它们组合在一起。作为结合前面所有内容的最后一个示例,我们希望将所有常规交互收集为键值对。输出: