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