Spark:更改键值对的Key
Spark: Change the Key of key value pair
是否可以更改键值对的键?我从不同的文件夹加载,密钥当前只是文件的路径,但我想根据文件来自哪个文件夹将密钥更改为整数。
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 -- 去掉父目录元素,returns 只去掉分组的文本文件
- zipWithUniqueId -- 为每组文本文件
提供唯一的Long
标识符
- map -- 交换元素所以键是
Long
id
- flatMapValues -- 将分组的文本文件展平,以便每个文件都包含在自己的记录中
是否可以更改键值对的键?我从不同的文件夹加载,密钥当前只是文件的路径,但我想根据文件来自哪个文件夹将密钥更改为整数。
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 -- 去掉父目录元素,returns 只去掉分组的文本文件
- zipWithUniqueId -- 为每组文本文件 提供唯一的
- map -- 交换元素所以键是
Long
id - flatMapValues -- 将分组的文本文件展平,以便每个文件都包含在自己的记录中
Long
标识符