2. 安装Spark与Python练习

一、安装Spark

1. 检查基础环境hadoop,jdk


图1 hadoop, jdk基础环境

2. 下载spark

3. 解压,文件夹重命名、权限

4. 配置文件

编辑该配置文件/usr/local/spark/conf/spark-env.sh,在文件中加上如下一行内容:

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

保存配置文件后,就可以启动、运行Spark


图2 spark配置文件

:若需要使用HDFS中的文件,则在使用Spark前需要启动Hadoop

5. 环境变量

~/.bashrc文件中加入

export SPARK_HOME=/usr/local/spark
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9.2-src.zip:PYTHONPATH
export PYSPARK_PYTHON=python3
export PATH=$PATH:$SPARK_HOME/bin

:环境变量中的py4j包必须与/usr/local/spark/python/lib/下的包命名一致


图3 py4j包版本
source ~/.bashrc	# 环境变量生效

6. 试运行Python代码

启动pyspark,成功后在输出信息的末尾可以看到“>>>”的命令提示符


图4 pyspark运行界面

在里面输入python代码进行测试:


图5 python代码测试

可以用以下命令或者Ctrl+D退出pyspark

exit()
quit()

二、Python编程练习—英文文本的词频统计

具体流程如下:

  1. 准备英文文本文件


    图6 英文文本文件
  2. 读文件

    txt = open("/home/zt/EN/ENText.txt", 'r').read()
    
  3. 预处理:大小写,标点符号,停用词

    txt = txt.lower()               			# 转为小写字母
        for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':	
            txt = txt.replace(ch, ' ')
    
  4. 分词

    words = TestTxt.split()
    
  5. 统计每个单词出现的次数

    for word in words:
        # 若字典中无当前词语则创建一个键值对,若有则将原有值加1
        counts[word] = counts.get(word, 0) + 1 
    
  6. 按词频大小排序

    items = list(counts.items())  			 # 将无序的字典类型转换为有序的列表类型
    items.sort(key=lambda x: x[1], reverse=True) 	 # 按统计值从高到低排序(以第二列排序)
    
  7. 结果输出并写文件

    for i in range(len(items)):
        word, count = items[i]
        print("{0:<10}{1:>5}".format(word, count))  			# 格式化输出词频统计结果
        open('output.txt', 'a').write(word+"\t\t\t"+str(count)+"\n")	# 写入output.txt中
    
点击查看完整代码

# 首先定义一个函数,用于提取文档并处理噪音
def getText():
    txt = open("/home/zt/EN/ENText.txt", 'r').read()
    txt = txt.lower()               					# 转为小写字母
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':	
        txt = txt.replace(ch, ' ')  					# 将文本中的特殊字符替换为空格
    return txt
    
TestTxt = getText() words = TestTxt.split() # 获得分割完成的单词列表 counts = {} # 创建空字典,存放词频统计信息 for word in words: # 若字典中无当前词语则创建一个键值对,若有则将原有值加1 counts[word] = counts.get(word, 0) + 1 items = list(counts.items()) # 将无序的字典类型转换为有序的列表类型 items.sort(key=lambda x: x[1], reverse=True) # 按统计值从高到低排序(以第二列排序) for i in range(len(items)): word, count = items[i] print("{0:<10}{1:>5}".format(word, count)) # 格式化输出词频统计结果 open('output.txt', 'a').write(word+"\t\t\t"+str(count)+"\n") # 写入output.txt中

运行结果如下:


图7 运行结果

三、搭建编程环境

可选择的开发环境有两种:Jupyter Notebook和PyCharm

可以根据自己的编程习惯进行对应搭建,参考资料如下

这里用PyCharm进行开发环境的搭建:

  1. 下载pycharm: http://www.jetbrains.com/pycharm/, 安装Community社区版即可

  2. 在下载文件夹中解压(也可自定解压路径)

    tar -zxvf  pycharm-community-2021.3.2.tar.gz -C 目标路径
    
  3. 打开终端,进入pycharm-2021.3.2/bin

    cd pycharm-2021.3.2/bin
    
  4. 执行pycharm.sh命令文件,开始安装;

    sh ./pycharm.sh
    
  5. 弹出PyCharm License Activation框,即PyCharm许可证激活。

    a. 选择Activation Code激活方式,

    c. 直接用浏览器打开地址 http://idea.imsxm.com ,点击该页面中的“获得注册码”,

    d. 复制该注册码,然后切换回Activation Code界面,输入注册码

    e. 然后点击“Activate”即可完成激活。

  6. 配置pycharm

    新建一个新项目

    在Run/Debug Configurations中找到自己的python运行环境路径

    which python3	# 查看python路径
    

    :一般情况下会在/usr/bin/python3

  7. 安装Py4j

    Py4j库:通过Py4J,Python程序能够动态访问Java虚拟机中的Java对象,Java程序也能够回调 Python对象。

    sudo pip install py4j
    

    :没有pip的会报错,可以先自行下载pip

    sudo apt update
    sudo apt install python3-pip
    

    验证安装过程,检查 pip 版本:

    pip3 --version
    
  8. 在pycharm中运行pyspark的程序

    开启hadoop

    start-all.sh
    

    测试代码如下:

    from pyspark import SparkContext
     
    sc = SparkContext()
     
    logData = sc.textFile("test.txt").cache()		# 这里的文件是HDFS中的文件
     
    numAs = logData.filter(lambda s: 'a' in s).count()
    numBs = logData.filter(lambda s: 'b' in s).count()
     
    print("Lines with a: %i, lines with b: %i" % (numAs, numBs))
    

    运行结果如下:


    图8 测试结果
posted @ 2022-03-04 09:29  ztop  阅读(142)  评论(0)    收藏  举报