代码之家  ›  专栏  ›  技术社区  ›  Phillip

基于列减去2个pyspark数据帧

  •  0
  • Phillip  · 技术社区  · 6 年前

    我有2个pyspark数据帧,

    i
    +---+-----+
    | ID|COL_A|
    +---+-----+
    |  1|  123|
    |  2|  456|
    |  3|  111|
    |  4|  678|
    +---+-----+
    j
    +----+-----+
    |ID_B|COL_B|
    +----+-----+
    |   2|  456|
    |   3|  111|
    |   4|  876|
    +----+-----+
    

    我想减去 i 从…起 j 基于特定列的值,即 COL_A 不应该出现在 COL_B 属于 J .

    diff
    +---+-----+
    | ID|COL_A|
    +---+-----+
    |  1|  123|
    |  4|  678|
    +---+-----+
    

    这是我的密码,

    common = i.join(j.withColumnRenamed('COL_B', 'COL_A'), ['COL_A'], 'leftsemi')
    diff = i.subtract(common)
    diff.show()
    

    但产出出现了问题,

    diff
    +---+-----+
    | ID|COL_A|
    +---+-----+
    |  2|  456|
    |  1|  123|
    |  4|  678|
    |  3|  111|
    +---+-----+
    

    1 回复  |  直到 4 年前
        1
  •  5
  •   Mayank Porwal    6 年前

    尝试:

    left_join = i.join(j, j.COL_B == i.COL_A,how='left')
    left_join.filter(left_join.COL_A.isNull()).show()
    

    如果列名为args,可以执行以下操作:

    left_join = i.join(j, j[colb] == i[cola],how='left')
    left_join.filter(left_join[cola].isNull()).show()