我有一个(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)
答案 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)