首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与火花公子一起进行队列研究

与火花公子一起进行队列研究
EN

Stack Overflow用户
提问于 2016-10-31 12:21:18
回答 1查看 379关注 0票数 1

我正在尝试建立一项队列研究,以跟踪应用程序中的用户行为,我想问您是否知道如果我使用.join(),我可以如何指定条件:

代码语言:javascript
复制
rdd1 = sc.parallelize ([(u'6df99638e4584a618f92a9cfdf318cf8',
    ((u'service1',
      u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A',
      u'2016-02-08',
      u'2016-39',
      u'2016-6',
      u'2016-2',
      '2016-10-19'),
     (u'service2',
      u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A',
      u'1',
      u'67.0',
      u'2016-293',
      u'2016-42',
      u'2016-10',
      '2016-10-19')))])


rdd2 = sc.parallelize ([(u'6df99638e4584a618f92a9cfdf318cf8',
    ((u'serice1',
      u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A',
      u'2016-02-08',
      u'2016-39',
      u'2016-6',
      u'2016-2',
      '2016-10-20'),
     (u'service2',
      u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A',
      u'10',
      u'3346.0',
      u'2016-294',
      u'2016-42',
      u'2016-10',
      '2016-10-20')))])

这两个rdd代表用户的信息,以'6df99638e4584a618f92a9cfdf318cf8‘作为ID,并在2016-10-19和2016-10-20期间登录服务1和service2。我的目标是加入我的两个rdd,每个rdd至少包含20000行。所以这一定是一个内在的连接。真正的目标是让所有已经登录2016-10-19‘的用户同时也登录了2016-10-20。因此,更具体地说,我的最后一个对象是作为结果,在这里,对于rxemple,在内部连接之后,只有rdd2的内容。

预期产出:

代码语言:javascript
复制
    [(u'6df99638e4584a618f92a9cfdf318cf8',
((u'serice1', u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A', u'2016-02-08', u'2016-39', u'2016-6', u'2016-2', '2016-10-20'), 
(u'service2', u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A', u'10', u'3346.0', u'2016-294', u'2016-42', u'2016-10', '2016-10-20'))
) ] 

一个简单的联接rdd1.join(rdd2)逻辑上给了我一个RDD,它包含匹配这两个RDD的所有元素对。一个leftOuterJoin或一个rightOuterJoin也不适合我的土地,因为我想要一个内部连接(仅在rdd1和rdd2中已经存在的in )。

预期输出:假设我们有两个词: dict1 = {'a':'man','b':woman,'c':‘宝贝’}和dict2 = {'a':'Zara','x':芒果,'y':'Celio'}。预期的输出必须是: output_dict ={a:'Zara'}。‘’(键)已经存在于dict 1中,我想要的是键,来自dict2的值!

它试图这样做:

代码语言:javascript
复制
rdd1.map(lambda (k, v) : k).join(rdd2)

这段代码给了我一个空的rdd。

该怎么办?PS :我必须处理rdds,而不是数据!因此,我不想将我的rdd转换为DataFrames :D任何帮助都很感激。太棒了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 12:50:30

因此,您正在寻找rdd1和rdd2的联接,这将只从rdd2获得键和值:

代码语言:javascript
复制
rdd_output = rdd1.join(rdd2).map(lambda (k,(v1,v2)):(k,v2))

结果是:

代码语言:javascript
复制
print rdd_output.take(1)

[(u'6df99638e4584a618f92a9cfdf318cf8', (
(u'serice1', u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A', u'2016-02-08', u'2016-39', u'2016-6', u'2016-2', '2016-10-20'), 
(u'service2', u'D8B75AA2-7408-49A7-A70D-6442C12E2B6A', u'10', u'3346.0', u'2016-294', u'2016-42', u'2016-10', '2016-10-20')
))]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40342095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档