2015-11-25 82 views
0

在单词计数示例中,例如,映射后我有(python,1)(Python,2)。我怎么能合并两成一个(python,3)通过执行如下:PySpark - 如何将键与大小写忽略

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

回答

3

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}