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

Apache Spark - How to split a joined dataset

我有一个 (K, (V,W)) 的连接数据集,我正在尝试拆分它以便从数据集中提取 (V,W) 对。我知道我不能 split and/or strip 这对,因为数据类型是元组而不是字符串。但是,我还没有找到绕过的方法 this.Can 有人请告诉我这将如何实现吗?

如果数据集名为joined_dataset并且包含

(show, (channel,views))

这是我在 Python 中的尝试:

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

更新

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

我的代码的目的是将这对拆分为 (tv_channel,viewers)。实际上,我只需要获取 joined_dataset 的第二个元素。我的理想输出应该类似于 ('DEF', 1038)。由于这是一个复合值,因此对象类型是 tuple 而不是 string 。不能使用 strip and/or 拆分函数拆分元组。

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

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

以下代码采用连接数据集 - (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)

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

这对我有用:

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

然后执行映射,提供此函数作为参数。