基于pycharm中pyspark的使用
pyspark的计算过程
pycharm实现wordcount
注意点
错误说明: 找不到 java home
原因:
当前python程序是通过ssh 连接到远端, 在远端进行执行的 , 在执行的时候, 需要加载各种环境变量, 而python代码在远端执行的时候, 主要是加载 .bashrc 文件, 但是这个文件中并没有配置jdk相关信息 从而导致无法使用
解决方案:
需要修改 linux服务器中 /root/.bashrc 文件, 添加以下两行内容:
export JAVA_HOME=/export/server/jdk1.8.0_241/
export PYSPARK_PYTHON=/root/anaconda3/bin/python
添加后, 执行 source 重新加载即可
source /root/.bashrc
说明:
PYSPARK_PYTHON 设置的是 base环境的python环境即可 如果是其他虚拟环境的, 设置为:
/root/anaconda3/envs/虚拟环境名称/bin/python
说明: 在后续所有的spark的代码中, 都需要添加以下内容:
import os
# 读取hdfs的文件数据, 完成WordCount案例
# 目的: 锁定远端操作环境, 避免存在多个版本环境的问题
os.environ["SPARK_HOME"]="/export/server/spark"
os.environ["PYSPARK_PYTHON"]="/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"]="/root/anaconda3/bin/python"
本地实现
#spark程序的编写wordcount
#导入spark的对象
from pyspark import SparkContext, SparkConf
import os
os.environ["SPARK_HOME"]="/export/server/spark"
os.environ["PYSPARK_PYTHON"]="/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"]="/root/anaconda3/bin/python"
#程序的入口
if __name__ == '__main__':
print('spark程序的入口')
#创建sc(sparkContext)对象
conf = SparkConf().setMaster('local[*]').setAppName('wordcount_01')
sc = SparkContext(conf=conf)
#编写wordcount案例
#读取文件 读取本地文件: file:/// 读取hdfs的协议:hdfs://node1:8020/ ,读取的时候是按行读取的
rdd1 = sc.textFile("file:export/data/workspace/_01_pyspark_base/data/words.txt")
#将读取到的每一行数据,进行切割操作,然后得到一个大列表,放置每一个单词
# rdd2 = rdd1.map(lambda x: x.split(' '))
#打印
# print(rdd2.collect())
#flatmap 第一个作用跟map的样,第二个作用对结果进行压扁得到一个大的列表
rdd2 = rdd1.flatMap(lambda x: x.split(' '