Mapreduce 猪的计数体裁

Mapreduce 猪的计数体裁,mapreduce,apache-pig,Mapreduce,Apache Pig,我处理movielensdata提供的数据集movies.dat。数据的前5行是 1:玩具总动员(1995):冒险|动画|儿童|喜剧|幻想 2:Jumanji(1995):冒险|儿童|幻想 3:脾气暴躁的老人(1995):喜剧|浪漫 4:等待呼气(1995):喜剧|戏剧|浪漫 《新娘之父》第二部(1995):喜剧 我想计算每种类型的确切出现次数。要做到这一点,下面的mapreduce(python)代码就足够了 #/usr/bin/env python 导入系统 #制图员 对于sys.stdin

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

1:玩具总动员(1995):冒险|动画|儿童|喜剧|幻想
2:Jumanji(1995):冒险|儿童|幻想
3:脾气暴躁的老人(1995):喜剧|浪漫
4:等待呼气(1995):喜剧|戏剧|浪漫
《新娘之父》第二部(1995):喜剧

我想计算每种类型的确切出现次数。要做到这一点,下面的mapreduce(python)代码就足够了

#/usr/bin/env python
导入系统
#制图员
对于sys.stdin中的行:
对于.strip().split(“:”[-1]行中的流派。split(“|”):
打印(“{x}\t1.”格式(x=genre))
#/usr/bin/env python
#减速器
导入系统
类型_dict={}
对于sys.stdin中的行:
数据=line.strip().split(“\t”)
如果len(数据)=2:                                                                                                                                                    
继续
其他:
如果数据[0]不在目录键()中:
类型目录[数据[0]]=1
其他:
类型目录[数据[0]+=1
a=列表(类型目录项())
a、 排序(key=lambda x:x[1],reverse=True)
对于类型,请按以下方式计数:
打印(“{x}\t{y}”。格式(x=流派,y=计数))
对猪的查询做同样的任务有什么建议吗?
提前感谢…

TOKENIZE
FLATTEN
可以在这里帮助您。Pig中的
TOKENIZE
操作符获取一个字符串和一个分隔符,根据分隔符将字符串拆分为多个部分,并将这些部分放入一个包中。清管器中的
flant
操作员取出一个袋子,将袋子中的每个元素分解成一个新记录。代码如下所示:

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

TOKENIZE
FLATTEN
可以帮助您解决这个问题。Pig中的
TOKENIZE
操作符获取一个字符串和一个分隔符,根据分隔符将字符串拆分为多个部分,并将这些部分放入一个包中。清管器中的
flant
操作员取出一个袋子,将袋子中的每个元素分解成一个新记录。代码如下所示:

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