当前位置: 首页 > 知识库问答 >
问题:

在pyspark中使用多脉冲值joing两个RDD,并基于join添加额外的值?

羊煜
2023-03-14

我创建了2个RDD,如下所示:

rdd1 = sc.parallelize([(u'176', u'244', -0.03925566875021147), (u'28', u'244', 0.9175106515709205), (u'165', u'244', -0.3837580218245722), (u'181', u'244', 0.29145693160561503), (u'161', u'244', -0.503468718448459), (u'28', u'275', 1.1636548589189926), (u'165', u'275', -1.026158464467282), (u'181', u'275', 0.6685791983070568)])

rdd2 = sc.parallelize([(u'176', u'244'), (u'28', u'244'), (u'165', u'244'), (u'165', u'275'), (u'181', u'275'), (u'141', u'388'), (u'154', u'238')])

我的预期输出应该如下所示:

[(u'176', u'244', -0.03925566875021147,1), (u'28', u'244', 0.9175106515709205,1), (u'165', u'244', -0.3837580218245722,1), (u'181', u'244', 0.29145693160561503,0), (u'161', u'244', -0.503468718448459,0), (u'28', u'275', 1.1636548589189926,0), (u'165', u'275', -1.026158464467282,1), (u'181', u'275', 0.6685791983070568,1)]

rdd1:(U'181',U'275',0.6685791983070568)和Rdd2:(U'181',U'275')的输出将为(U'181',U'275',0.6685791983070568,1)

否则:rdd1包含(U'181',U'244',0.29145693160561503)但rdd2不包含任何类似于(U'181',U'244')的元组,因此预期输出为(U'181',U'244',0.29145693160561503,0)

我通过创建数据帧实现了这一点,但我不想使用数据帧连接。请帮助这如何实现使用RDDS。

共有1个答案

晏正豪
2023-03-14

要做到这一点,在rdd方法中,您必须将rdd与您想要连接的列配对,然后执行this和other的左外部连接。对于this中的每个元素(k,v),得到的RDD要么包含其他元素中w的所有对(k,(v,Some(w))),要么包含其他元素中没有键k的对(k,(v,None))。

 userRDD.leftOuterJoin(empRDD).collect {
        case (String, (firstrddvalue, None)) => (k,v,0)
        case (String, (firstrddvalue,secondrddvalue))=>(k,v,1)
      }
 类似资料:
  • 我有一个关于根据另一个数据表中的信息向数据表中添加列的问题 我的数据是这样的: 数据表 1(足球比赛) 数据表2(足球队收到的卡片): 现在,如果我想基于另一列添加一列,我将在datatable中使用以下函数: 但现在有两个变量需要匹配。球队代码和赛季。这是如何工作的?

  • 我有一个Spark DataFrame,我正在尝试基于以前的列创建一个新列,但对我来说,困难的是我已经按行计算了列的值。例如: 列1 |列2 |列3 1 | 2 | 3 4|5|0 3 | 1 | 1 因此,我想要一个新列,每行具有表达式 max(col1, col2, col3)的列名。所以,所需的输出: Col1 |Col2 |Col3 |Col4 1|2|3|'col3' 4|5|0|'co

  • 问题内容: 我可以添加流或其他元素,如下所示: 我可以随时添加新内容,例如: 但这是丑陋的,因为是静态的。如果是实例方法,则上面的示例将更容易阅读: 和 我的问题是: 1)是否有充分的理由为什么它是静态的?还是我缺少一些等效的实例方法? 2)无论如何,有没有更好的方法呢? 问题答案: 如果为 Stream.concat 和 Stream.of 添加 静态导入 ,则第一个示例可以编写如下: 导入具有

  • 我可以添加流或额外的元素,像这样: 我可以边走边添加新的东西,比如: 但这很难看,因为是静态的。如果是一个实例方法,那么上面的示例将更容易阅读: 而且 2)无论如何,有没有更好的方法?

  • 问题内容: 我必须按照下面显示的方式创建一个表。我们可以这样创建吗?(如是) 表名称:样本 其中包含多个值的类别归档。 以及我们如何搜索类别4出现在表格的哪一行。 问题答案: 您无法创建嵌套表。而且您想到的并不是设计这样的桌子的好主意。您应该有两个表(如果是category,则恰好三个 表 包含描述)。一个用于,第二个表保存 每个产品 的 类别 。示例设计如下所示, 和填充样本记录 SQLFidd

  • 问题内容: 我正在用JOIN执行SQL UPDATE,但是该JOIN可以匹配多个值。假设我们有以下表格: 然后执行以下查询: 结果如下: 我需要做的是使用最后匹配的值更新;因此,在这种情况下,我将需要以下结果: 问题答案: 如果您可以定义Table_2中记录的顺序(最后是什么意思?),则可以使用窗口函数来过滤Table_2,以仅包括与之匹配的每组记录的最后一条记录: 在特殊情况下,order by