Skip to main content
 首页 » 编程设计

python之Spark : Change the Key of key value pair

2024年10月24日28shihaiming

是否可以更改键值对的键?我从不同的文件夹加载, 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)) 

步骤总结:

  1. ma​​p -- 将键值对放入元组中,将键转换为父目录
  2. groupByKey -- 根据相应的父目录对所有文本文件进行分组
  3. values -- 去掉父目录元素并只返回分组的文本文件
  4. zipWithUniqueId -- 为每组文本文件提供唯一的长标识符
  5. ma​​p -- 交换元素,因此键是 Long id
  6. flatMapValues -- 将分组的文本文件展平,以便每个文件都包含在自己的记录中