计算猪的体裁

时间:2019-03-29 12:35:28

标签: mapreduce apache-pig

我处理由movielensdata提供的数据集movie.dat。数据的前5行是

1:玩具总动员(1995):冒险|动画|儿童|喜剧|幻想
2:Jumanji(1995):冒险|儿童|幻想
3:Grumpier Old Men(1995):喜剧|浪漫片
4:等待呼气(1995):喜剧|戏剧|浪漫
5:新娘之父II(1995):喜剧

我想计算每种类型的确切发生次数。为此,下面的mapreduce(python)代码就足够了。

#!/usr/bin/env python

import sys

#mapper

for line in sys.stdin:
    for genre in line.strip().split(":")[-1].split("|"):
        print("{x}\t1".format(x=genre))

#!/usr/bin/env python                                                                                                                                                   
#reducer
import sys                                                                                                                                                              

genre_dict={}                                                                                                                                                           
for line in sys.stdin:                                                                                                                                                  
    data=line.strip().split("\t")                                                                                                                                       
    if len(data)!=2:                                                                                                                                                    
        continue                                                                                                                                                        
    else:                                                                                                                                                               
        if data[0] not in genre_dict.keys():                                                                                                                            
            genre_dict[data[0]]=1                                                                                                                                       
        else:                                                                                                                                                           
            genre_dict[data[0]]+=1                                                                                                                                      

a=list(genre_dict.items())                                                                                                                                              
a.sort(key=lambda x:x[1],reverse=True)                                                                                                                                  

for genre,count in a:                                                                                                                                                   
    print("{x}\t{y}".format(x=genre,y=count)) 

对猪的查询是否有建议执行相同的任务? 预先感谢...

1 个答案:

答案 0 :(得分:0)

TOKENIZEFLATTEN可以在这里为您提供帮助。 Pig中的TOKENIZE运算符采用一个字符串和一个定界符,根据定界符将字符串分成多个部分,然后将其放入包中。 Pig中的FLATTEN运算符拿起一个包,将包中的每个元素爆炸成新记录。该代码将如下所示:

--Load you initial data and split into columns based on ':'
data = LOAD 'path_to_data' USING PigStorage(':') AS (index:long, name:chararray, genres:chararray);

--Split & Explode each individual genre into a separate record
dataExploded = FOREACH data GENERATE FLATTEN(TOKENIZE(genres, '|')) AS genre;

--GROUP and get counts for each genre
dataWithCounts = FOREACH (GROUP dataExploded BY genre) GENERATE
              group AS genre,
              COUNT(dataExploded) AS genreCount;

DUMP dataWithCounts;