在当今世界,数据量的增长速度令人瞩目。这种增长为众多公司提供了洞察数据的机会,而这些信息被用来促进业务增长。智能助手如Siri、Google Home和Alexa等,都利用大数据、机器学习和物联网技术来收集数据并回答问题。由于数据驱动技术的高速增长,正在生成越来越多的数据,需要处理的数据量达到了拍字节级别。对于单个计算机来说,处理如此庞大的数据量并非易事,因此需要多台计算机并行处理这些数据,这就是大数据背后的理念。
处理大量数据需要多台计算机并行工作。由于无法将大量数据加载到单个计算机上,这就是所谓的分布式计算。换句话说,处理任务被分割并在各自的计算资源上独立运行。如果任何一台计算机或节点失败或宕机,其他节点会接管剩余的工作。一个集群是一个分布式系统(由多个节点组成的集合),它们协同工作以完成特定任务。大数据生态系统由许多开源工具组成,例如Hadoop和Apache Spark等大数据工具,以及Hive等,它们共同构成了大数据生态系统。由于它们可以免费使用且透明度高,因此非常受欢迎。
大数据生态系统包括各种开源和付费工具,它们都为特定目的而设计。大数据需要云计算、数据处理工具、数据库管理工具和业务智能到编程语言。所需的工具可以分为以下几类:
Hadoop生态系统由各种开源工具组成,这些工具都属于Hadoop项目。所有这些组件都相互支持。
像腾讯、Uber、Netflix、Google和阿里巴巴这样的大型科技公司都在运行Apache Spark操作。Spark是Apache Map-Reduce的强大替代品。与Hadoop相比,Spark在计算方面更强大、更快,它具有高可访问性,并且能够处理分布式系统中的大量数据。内存中计算(在RAM而不是磁盘上进行计算)使Spark在分布式数据处理方面比Map-Reduce运行得更快。
以下是使Apache Spark广受欢迎和优越的顶级特性。
快速处理
Spark在内存中处理数据的速度比Map-Reduce快100倍,在Hadoop集群中快10倍。Spark已经创下了磁盘上最快数据排序的世界纪录。
支持多种API
Spark提供多种编程语言API,这意味着Spark应用程序可以用任何语言编写,例如Scala、Java、Python、R。Spark原生是用Scala编写的。Spark Core执行大规模分布式和并行数据处理。Spark Core具有容错性,这意味着如果任何节点宕机,处理不会停止。
强大的库
Spark还支持Map-Reduce函数。Spark在分布式数据框架和SQL上工作。ML-lib是随Spark一起提供的丰富的机器学习包。Spark Streaming使实时数据处理和分析成为可能。
实时处理
Spark还支持传统的MapReduce,能够处理来自Hadoop HDFS文件的数据。Spark可以在没有任何冲突的情况下在HDFS集群上工作。
部署和兼容性
Spark能够在任何云笔记本上运行,而不需要许多依赖项。Spark可以在Kubernetes、Mesos、Hadoop和云笔记本上运行。
任何Spark引擎都包含三个高级组件:
Spark原生是用Scala编程语言编写的,它编译成Java。可以使用py4j与JVM通信。这使得使用Python在Spark上工作成为可能。因此,可以轻松地用Python创建Spark应用程序。在后端,它将使用py4j。
要运行Spark,需要一个Python环境,它可以是任何云笔记本或本地Python环境,但强烈建议创建一个Databricks Spark集群,这是一个关于如何在Databricks上免费启动Spark集群的指南。
它是一个Spark API,允许用Spark创建应用程序。在本文中,将使用PySpark在Spark上工作。
在Python中设置Spark需要以下库。
!pip install pyspark
!pip install findspark
Findspark在当前IPython配置文件中添加一个启动文件,并为Python中的Spark创建一个环境。
import findspark
findspark.init()
Spark会话是处理Spark数据框架和SQL所需的。SparkContext是Spark应用程序的入口点,它还包含创建RDD(弹性分布式数据库)的函数,如parallelize()。
# 初始化spark上下文类
sc = SparkContext()
# 创建spark会话
spark = SparkSession
.builder
.appName("Python Spark DataFrames basic example")
.config("spark.some.config.option", "some-value")
.getOrCreate()
getOrCreate创建一个新会话,如果指定名称的会话不存在。
会话成功创建后,可以通过运行spark命令来验证,它将返回正在运行的会话的详细信息。
spark
SparkRDDs是Spark中的原始分布式数据抽象,应用函数式编程概念来处理RDDs。RDD接受多种类型的文件,包括:
# 将每个数字减少1
sRDD = xrangeRDD.map(lambda x: x-1)
# 选择所有小于10的数字
filteredRDD = sRDD.filter(lambda x : x<10)
print(filteredRDD.collect())
filteredRDD.count()