从已连接的RDD中提取值

时间:2015-12-26 00:27:59

标签: python apache-spark pyspark

我有两个列表,如:

Hourly_Sports,DEF (show,channel)
Hourly_Sports,21  (show,views)

我已经拆分字符串并使用代码重新排列:

def split_show_views(line):
    show,views=line.split(',')
    return (show, views)   
show_views = show_views_file.map(split_show_views)
def split_show_channel(line):
     show,channel=line.split(',')
     return (show, channel)
show_channel = show_channel_file.map(split_show_channel)
     joined_dataset = show_views.join(show_channel)

现在,当我打电话给"收集"该列表如下:

(u'Baked_Talking', (u'MAN', u'138'))

现在我只想要"频道"和"查看部分" 说明是:

def extract_channel_views(show_views_channel): 
    <INSERT_CODE_HERE>
    return (channel, views)

似乎联合列表已经包含了拆分字符串,因此我无法使用&#34; split&#34;再次运行,我已经检查过python内置函数但没有找到任何提取函数?在我看来,&#34;频道&#34;和&#34;观点&#34;在前面的步骤中定义,所以我不必添加任何东西?如果不是,我该如何定义频道和观看?我试过像show,channel,views=split('',('',''))这样的东西,我认为没错,但我真的不知道如何做到这一点。

2 个答案:

答案 0 :(得分:3)

您可以做的最简单的事情是使用values方法:

joined_dataset.values()

但是如果你真的想要一个单独的函数,那么你必须知道的是输出RDD的元素是普通的Python tuples。这意味着您可以使用getitem

def extract_channel_views(show_views_channel):
    return show_views_channel[1]

或解压缩:

def extract_channel_views(show_views_channel):
    _, (channel, views) = show_views_channel
    return channel, views

答案 1 :(得分:0)

这两种方法都可以满足您的需求:

def extract_channel_views(svc): 
    views = svc[1][0]
    channel = svc[1][1]
    return (channel, views)

def extract_channel_views(svc): 
    cv = svc[1]
    views = cv[1]
    channel = cv[0]
    return (channel, views)