PySpark-如何在忽略大小写的情况下合并密钥



在单词计数示例中,例如,映射后我有(python,1)(Python,2)。如何通过以下操作将两者合并为一个(python,3)

def combine(a, b):
    if a[0].lower() == b[0].lower():
        return (a[0], a[1] + b[1])

然后我打电话给

(sc.map(lambda word: (word, 1))
    .reduceByKey(lambda a, b: a + b)
    .reduce(lambda a, b :combine(a, b)))

reduce不太适合这里(它需要一个额外的map到一个可以处理预期聚合的缓冲区),并且在映射中简单地转换为小写更有意义:

from operator import add 
rdd = sc.parallelize([
   "Python", "python", "Haskell", "Clojure", "Scala", "scala"])
rdd.map(lambda word: (word.lower(), 1)).reduceByKey(add).collectAsMap()
## {'clojure': 1, 'haskell': 1, 'python': 2, 'scala': 2}

相关内容

  • 没有找到相关文章

最新更新