是否可以更改键值对的键?我从不同的文件夹加载, key 当前只是文件的路径,但我想根据文件来自哪个文件夹将 key 更改为整数。
dir_pair_data = sc.wholeTextFiles(mypath)
dir_pair_data = dir_pair_data.map(lambda (x,y) : os.path.dirname(x),y )
当然这行不通...有没有人给我提示,我是激发 python 的新手...
请您参考如下方法:
我相信以下代码可以完成您想要的,即通过对应于其父目录的唯一 ID 键入每组文件(尽管不可否认,它可以优化,因为我自己对 pyspark 有点陌生) :
dir_pair_data = sc.wholeTextFiles(mypath)
dir_pair_data = (dir_pair_data
.map(lambda (x,y): (os.path.dirname(x), y))
.groupByKey()
.values()
.zipWithUniqueId()
.map(lambda x:(x[1], x[0]))
.flatMapValues(lambda x: x))
步骤总结:
- map -- 将键值对放入元组中,将键转换为父目录
- groupByKey -- 根据相应的父目录对所有文本文件进行分组
- values -- 去掉父目录元素并只返回分组的文本文件
- zipWithUniqueId -- 为每组文本文件提供唯一的
长标识符 - map -- 交换元素,因此键是
Longid - flatMapValues -- 将分组的文本文件展平,以便每个文件都包含在自己的记录中
