类库与框架、在window(pycharm)搭建pyspark库,连接Linux。
类库:一堆别人写好的代码,可以直接导入使用,pandas框架:可以独立运行,软件产品,如sparkpandas用于:小规模数据集spark用于:大规模数据集。
类库:一堆别人写好的代码,可以直接导入使用,pandas
框架:可以独立运行,软件产品,如spark
pandas用于:小规模数据集
spark用于:大规模数据集
pyspark
python的运行类库,内置了完全的spark api ,可以通过pyspark类库类库来编写spark应用程序。并将其提交到spark集群中运行。
这里作者使用情况如下:
1.在window搭建pycharm,并下载pyspark库。
2.在Linux下搭建anaconda
3.使用pycharm里面的shh连接到Linux里面的anaconda新建的环境encv的python,连通,在window下的pycharm运行代码就可以自动传送到Linux里面了(本质就是用window控制Linux的anaconda写代码)
搭建。。很麻烦,本地需要 pycharm专业版,利用shh连接Linux中的ana库。
在我第二次使用远程开发的时候,不知道为什么不同步了,因此我重新配置了ssh连接。故此,我重新要介绍一下如何连接shh,避免下次不会了。
/expert/server/anaconda3/envs/pyspark/lib/python3.8/site-packages
这是我在新虚拟环境pyspark,下载的pyspark包的地址,因此,在连接时,我应该选择,python3.8作为我的连接地址。
本地window测试一(读取Linux数据)
#conding:utf8
from pyspark import SparkConf, SparkContext
if __name__ == "__main__":
conf=SparkConf().setMaster("local[*]").setAppName("wordcounthelloworld")
sc=SparkContext(conf=conf)
file_rdd=sc.textFile("data/input/words.txt")
words_rdd=file_rdd.flatMap(lambda line: line.split(" "))
wrods_with_one_rdd=words_rdd.map(lambda x: (x, 1))
result_rdd=wrods_with_one_rdd.reduceByKey(lambda a, b: a + b)
print(result_rdd.collect())
测试二(读取hdfs数据)
#conding:utf8
from pyspark import SparkConf, SparkContext
if __name__ == "__main__":
conf=SparkConf().setMaster("local[*]").setAppName("wordcounthelloworld")
sc=SparkContext(conf=conf)
file_rdd=sc.textFile("hdfs://v1:8020/user/local/person2/person2.txt")
words_rdd=file_rdd.flatMap(lambda line: line.split(" "))
wrods_with_one_rdd=words_rdd.map(lambda x: (x, 1))
result_rdd=wrods_with_one_rdd.reduceByKey(lambda a, b: a + b)
print(result_rdd.collect())
测试三(在Linux系统里面使用spark运行代码)
注:1.conf那里不要设置setmaster,如果指定master,在运行代码里,使用,spark-submit --master yarn,代码优先级高,无需再指定master
2.读取地址,分布式,因此,三台机器,要不三台都存有该数据,要不就读取HDFS
指令: spark/bin/spark-submit --master yarn /tmp/pycharm_project_779/7.py(yarn客户端)
#conding:utf8
from pyspark import SparkConf, SparkContext
if __name__ == "__main__":
conf=SparkConf().setAppName("wordcounthelloworld")
sc=SparkContext(conf=conf)
file_rdd=sc.textFile("hdfs://v1:8020/user/local/person2/person2.txt")
words_rdd=file_rdd.flatMap(lambda line: line.split(" "))
wrods_with_one_rdd=words_rdd.map(lambda x: (x, 1))
result_rdd=wrods_with_one_rdd.reduceByKey(lambda a, b: a + b)
print(result_rdd.collect())
为什么在本地使用要配置环境变量
在 Windows 上使用 PySpark 时,如果不配置 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 环境变量,可能会导致 PySpark 无法正确找到 Python 解释器,从而无法正常运行。这是因为 PySpark 需要明确知道使用哪个 Python 解释器来运行代码,特别是在 Windows 系统上,环境变量的配置尤为重要。以下是一些详细的原因和解释:
1. PySpark 的工作原理
PySpark 是 Apache Spark 的 Python API,它允许用户使用 Python 编写 Spark 应用程序。PySpark 本身是一个 Python 包,但它依赖于 Spark 的 Java/Scala 核心。因此,PySpark 需要与 Spark 的核心组件进行交互,这涉及到跨语言的通信。
2. 为什么需要配置环境变量
在 Windows 上,系统默认的环境变量配置可能无法满足 PySpark 的需求。具体来说:
-
PYSPARK_PYTHON:这个环境变量用于指定 PySpark 在集群模式下使用的 Python 解释器路径。如果不配置这个变量,PySpark 可能无法找到正确的 Python 解释器,导致在集群模式下运行时出现错误。
-
PYSPARK_DRIVER_PYTHON:这个环境变量用于指定 PySpark 在驱动程序模式下使用的 Python 解释器路径。驱动程序是 PySpark 应用程序的主进程,负责与 Spark 集群进行通信。如果不配置这个变量,驱动程序可能无法找到正确的 Python 解释器,导致应用程序无法启动。
3. 其他库为什么可以不用配置
其他 Python 库(如 NumPy、Pandas 等)通常不需要配置环境变量,因为它们是纯 Python 库,不依赖于外部的 Java/Scala 组件。这些库可以直接在 Python 解释器中运行,而不需要与外部系统进行复杂的交互。因此,只要 Python 解释器本身配置正确,这些库就可以正常工作。
4. PySpark 的特殊需求
PySpark 的特殊之处在于它需要与 Spark 的 Java/Scala 核心进行交互,这涉及到跨语言的通信和依赖管理。因此,PySpark 需要明确知道使用哪个 Python 解释器来运行代码,以确保与 Spark 集群的兼容性和稳定性。在 Windows 上,环境变量的配置尤为重要,因为 Windows 的路径和环境变量管理与 Unix-like 系统(如 Linux 和 macOS)有所不同。
5. 总结
-
PySpark 需要配置环境变量:因为 PySpark 需要与 Spark 的 Java/Scala 核心进行交互,必须明确指定 Python 解释器的路径,以确保跨语言通信的正确性。
-
其他库不需要配置:因为这些库是纯 Python 库,不依赖于外部的 Java/Scala 组件,只需要 Python 解释器本身配置正确即可。
通过配置 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 环境变量,可以确保 PySpark 在 Windows 上正确找到 Python 解释器,从而正常运行。
更多推荐
所有评论(0)