Spark:更改键值对的键

时间:2015-10-12 14:52:51

标签: python apache-spark keyvaluepair

是否可以更改键值对的键?我从不同的文件夹加载,密钥当前只是文件的路径,但我想将密钥更改为整数,具体取决于文件来自哪个文件夹。

dir_pair_data = sc.wholeTextFiles(mypath)
dir_pair_data = dir_pair_data.map(lambda (x,y) : os.path.dirname(x),y )

当然这不起作用......有没有人对我有所暗示,我是一个非常新鲜的人来煽动蟒蛇......

1 个答案:

答案 0 :(得分:2)

我相信下面的一段代码可以通过与其父目录对应的唯一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. - 删除父目录元素并仅返回分组的文本文件
  5. zipWithUniqueId - 为每组分组的文本文件提供唯一的Long标识符
  6. 地图 - 交换元素,因此密钥为Long id
  7. flatMapValues - 展开已分组的文本文件,以便每个文件都包含在自己的记录中