一、集群配置文件坑——感觉就是bug~
[jaxim@ip-172-20-9-101 jaxim_userprofile_notification]$ ls -R
.:
finance_app.txt lib run.sh src
./lib:
GeoLite2-City.mmdb rule.json spend_level.json
./src:
profile_noti.py profile_tool.py __pycache__
文件结构大概如上:
finance_app.txt如果放在lib目录下,就会显示找不到文件,而放到当前文件或这src文件下就可。
最坑的是lib下其他两个json格式文件是可以读取的,而即使把finance_app.txt改成finance_app.json依然无法读取。——无法确定这个原因到底是啥??
附:
采用sc.addPyFile()和sc.addFile()方式添加相关配置文件。
sc.addPyFile():常用于.py 和.zip 文件的添加,且支持较大的文件;
sc.addFile():常用于小文件。
import sys
from pyspark import HiveContext
from pyspark.sql import SparkSession
from pyspark import StorageLevel
from datetime import datetime as dt
import os
import re
from datetime import datetime
import geoip2.database
import random
import profile_tool
if (sys.argv[2] != 'test'):
os.environ['PYSPARK_PYTHON'] = '/usr/bin/python3'
os.environ['SPARK_DRIVER_PYTHON'] = '/usr/bin/python3'
os.environ['JAVA_HOME'] = '/usr/lib/jvm/java-openjdk/'
os.environ['SPARK_HOME'] = '/usr/hdp/3.0.1.0-187/spark2/'
os.environ['PYTHONPATH'] = '$SPARK_HOME/python/:$PYTHONPATH'
spark = SparkSession \
.builder \
.appName("profile_notification") \
.getOrCreate()
sc = spark.sparkContext
sc.setLogLevel("Error")
hivec = HiveContext(sc)
sc.addPyFile("profile_tool.py")
sc.addPyFile("../lib/GeoLite2-City.mmdb")
sc.addFile("../finance_app.txt")
sc.addFile("../lib/rule.json")
sc.addFile("../lib/spend_level.json")
本来还想将配置文件和脚本分开,看来是分不开了~。