7. wordcount(pycharm)

jupyter notebook的优点是交互性,但因为是.ipynb文件,不能重复使用

可以使用集成开发工具(如pycharm、eclipse)来创建项目,以便重复使用

hdfs命令:

开启hadoop集群:start-all.sh

hdfs创建test目录:hadoop fs -mkdir -p /test

测试文件上传到hdfs的test目录:

hadoop fs -copyFromLocal /root/PycharmProjects/test/data.txt /test/

列出test目录的文件:hadoop fs -ls /test

查看data.txt文件:hadoop fs -cat /test/data.txt

代码:

# -*- coding:utf-8 -*-

from pyspark import SparkContext # 导入SparkContext

from pyspark import SparkConf # 导入SparkConf

# SparkContext是开发spark应用的入口,jupyter可以直接使用,这里要自行创建

# 此函数的目的是得到sc(SparkContext),如我们常用的sc.master

def CreateSparkContext():

# setAppname为设置app名,此名称会显示在spark、yarn的web页面

sparkConf = SparkConf().setAppName("WordCounts").set("spark.ui.showConsoleProgess","false")

sc = SparkContext(conf = sparkConf)

print("master="+sc.master) # 显示当前的运行模式

SetLogger(sc) # 设置不显示过多信息,函数在下面

SetPath(sc) # 设置文件读取路径,函数在下面

return (sc)

def SetLogger(sc): # 去除spark默认显示的杂乱信息

logger = sc._jvm.org.apache.log4j

logger.LogManager.getLogger("org").setLevel(logger.Level.ERROR)

logger.LogManager.getLogger("akka").setLevel(logger.Level.ERROR)

logger.LogManager.getRootLogger().setLevel(logger.Level.ERROR)

def SetPath(sc): # 配置读取文件的路径(本地文件和hdfs文件)

global Path

if sc.master[0:5] == "local": # local模式读取本地文件

Path = "file:/root/PycharmProjects/test/"

else: # 其他模式(yarn等)读取hdfs文件

Path = "hdfs://hadoop01:9000/test/"

# 主程序

if __name__ == "__main__":

print("开始执行 wordcount")

sc = CreateSparkContext()

print("开始读取文本文件...")

textFile = sc.textFile(Path + "data.txt")

print("文本共有"+str(textFile.count())+"行")

# map-reduce 运算

countsRDD = textFile.flatMap(lambda line:line.split(' '))\

.map(lambda x:(x, 1))\

.reduceByKey(lambda x,y:x+y)

print("文本统计共有"+str(countsRDD.count())+"项数据")

# 保存结果到文件

print("开始保存到文本文件...")

try:

countsRDD.saveAsTextFile(Path + "output")

except Exception as e:

print("输出目录已存在,请先删除原有目录")

sc.stop()

本地模式:

pycharm直接run:默认是local

yarn模式:

可以通过添加外部工具来实现在yarn上运行

使用 spark-sbmit,详见第9节 spark-sbmit

点击菜单栏“File”–>”Settings”–>”Tools”–>”External Tools”–>”+”

填:

Name:spark-sbmit (其实是自定义的)

Program:spark-sbmit所在的目录,在spark的bin目录下

Arguments:填入相关参数,例如--master yarn-client wordcount.py

注意不要直接输入wordcount.py,点insert,选择filename

否则我们换个文件(如test.py)运行,还要手动改成test.py

Working directory:wordcount.py所在目录,同样不直接输入,点insert

选择filedir

运行:

菜单栏”Tools”–>”External Tools”,点击运行”spark submit”

猜你喜欢

转载自blog.csdn.net/weixin_42490528/article/details/86034566