Apache Spark - 如何拆分已连接的数据集

时间:2015-12-13 22:55:15

标签: python join apache-spark pyspark

我有一个(K,(V,W))的联合数据集,我试图将其拆分,以便我可以从数据集中提取(V,W)对。我知道我不能分割和/或剥离对,因为数据类型是元组而不是字符串。但是,我还没有办法解决这个问题。有人可以告诉我这将如何实现吗?

如果数据集名为joined_dataset且包含

(show, (channel,views))

这是我在Python中的尝试:

def extract_channel_views(joined_dataset):
    channel = joined_dataset[1]
    views =joined_dataset[1].split(",")  ?????
    return (channel,view)

3 个答案:

答案 0 :(得分:1)

这对我有用:

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

然后执行提供此功能的地图作为参数。

答案 1 :(得分:0)

以下代码采用已加入的数据集 - (K, (V, W))并检索两个RDD - (K, V)(K, W)。我希望这就是你的意思 -

def extract_channel_views(joined_dataset):
    channel_views = joined_dataset.map(lambda x: (x[0], x[1][0]))
    views = joined_dataset.map(lambda x: (x[0], x[1][1]))
    return (channel_views, views)

我们的想法是使用map函数将键映射到正确的值。

答案 2 :(得分:-1)

更新

所以 - 在pyspark中,我试图在我的数据集中拆分对,其中键是tv_show的名称,值包含(tv_channel,viewers)。样本输入如下所示:(' PostModern_Cooking',(' DEF',1038))。

我的代码的目的是将对分割成(tv_channel,观众)。实际上,我只需要获取join_dataset的第二个元素。那么我的理想输出应该是这样的(' DEF',1038)。由于这是一个复合值,因此对象类型是元组,也不是字符串。无法使用条带和/或拆分功能拆分元组。

我设法编写下面的代码,将数据集joind_dataset [1]的第二个元素存储到另一个名为channel_views的RDD中。新的RDD本身就是一个列表,所以我可以通过调用此列表的第一个和第二个项目channel_view [0]和channel_view [1]来简单地将其拆分。所以代码返回(' DEF',1038)。

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