main.py文件
# coding:utf8
from pyspark import SparkConf, SparkContext
from defs_19 import city_with_category
import json
if __name__ == '__main__':
conf = SparkConf().setAppName("test-yarn-1")
conf.set("spark.submit.pyFiles", "defs.py")
sc = SparkContext(conf=conf)
# 如果提交到集群运行,除了主代码以外,还依赖了其它的代码文件
# #需要设置一个参数,来告知spark ,还有依赖文件要同步上传到集群中
# 参数叫做: spark .submit.pyFiles
# 参数的值可以是单个.py文件,―也可以是.zip压缩包(有多个依赖文件的时候可以用zip压缩后上传)
# 读取数据文件
# file_rdd = sc.textFile("../data/input/order.text")
file_rdd = sc.textFile("hdfs://192.168.88.161:8020/test/input/order.text")
# 进行rdd数据的split 按照|符号进行, 得到一个个的json数据
jsons_rdd = file_rdd.flatMap(lambda line: line.split("|"))
# print(jsons_rdd.collect())
# 通过Python 内置的json库, 完成json字符串到字典对象的转换
dict_rdd = jsons_rdd.map(lambda json_str: json.loads(json_str))
# print(dict_rdd.collect())
# 过滤数据, 只保留北京的数据
beijing_rdd = dict_rdd.filter(lambda d: d['areaName'] == "北京")
# print(beijing_rdd.collect())
# 组合北京 和 商品类型形成新的字符串
category_rdd = beijing_rdd.map(city_with_category)
# print(category_rdd.collect())
# 对结果集进行去重操作
result_rdd = category_rdd.distinct()
# 输出
print(result_rdd.collect())
defs.py文件
def city_with_category(data):
return data['areaName']+"_"+data['category']
Linux上提交文件命令
/export/server/spark/bin/spark-submit --master yarn --py-files ./defs.py ./main.py