(作者:陈玓玏)
开始还不太熟悉,想着这个需求可以一分为二:
- 我想直接读取所有文件并合并结果;
- 我想获取文件路径,然后再一个一个获取结果。
第一种,可以用
sc.textFile(path),直接批量读取文件
第二种,我暂时没找到pyspark里的好方法,所以我直接用命令行+解析命令行结果的操作进行的。
- 命令行获取文件路径:
d = os.popen("hadoop fs -ls /user/log/ctm_api_logs | awk '{print $8}' ").read().split('\n')
- 解析命令行结果:
for j in d:
print(j)
df = spark.read.format('json').load(j)
第三种,pyspark可以直接读取一整个路径里所有的压缩文件,发现这个方法更好用,直接解析,因此没必要用textFile,也没必要把路径全部提取出来再解析,可以直接解析一整个文件夹:
df = spark.read.format('json').load('/user/log/ctm_api_logs')