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))

步骤总结:

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