V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cqcn1991
V2EX  ›  问与答

Spark/PySpark 求教: 怎么给 join 结果加上一列 column 作为表示?(类似 left semi join)

  •  
  •   cqcn1991 · 2018-05-24 22:48:25 +08:00 · 2157 次点击
    这是一个创建于 2403 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实在是对 sql/spark 不熟,不知道有没有朋友能指点一下?

    比如,数据如下

    customer = spark.createDataFrame([
        (0, "Bill Chambers"),
        (1, "Matei Zaharia"),
        (2, "Michael Armbrust")])\
      .toDF("customerid", "name")
      
    order = spark.createDataFrame([
        (0, 0, "Product 0"),
        (1, 1, "Product 1"),
        (2, 1, "Product 2"),
        (3, 3, "Product 3"),
        (4, 1, "Product 4")])\
      .toDF("orderid", "customerid", "product_name")
    

    我要拿到有 order 的 customer, 可以用 left semi来做

    customer.join(order, ['customerid'], "left_semi").show()
    

    返回结果如图

    enter image description here

    现在,我想直接加上一列has_order作为标记,而不是直接把没有的行去掉(这样方便对比分析、作图)。就是想得到这样的结果:

    +----------+----------------+---------+ 
    |customerid|            name|has_order| 
    +----------+----------------+---------+ 
    |         0| Bill Chambers  |     true| 
    |         1| Matei Zaharia  |     true| 
    |         2|Michael Armbrust|    false| 
    +----------+----------------+---------+
    

    想问下可以怎么做?

    这个也在 stackoverflow 上问了一下,不知道这里有没有朋友可以指点一下,谢谢!

    1 条回复    2018-05-25 07:57:11 +08:00
    zhusimaji
        1
    zhusimaji  
       2018-05-25 07:57:11 +08:00 via iPhone
    可以看官方文档,都有例子的,给楼主贴个,使用 select 方法选择字段
    >>> df.join(df2, 'name').select(df.name, df2.height).collect()
    [Row(name='Bob', height=85)]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2772 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 12:01 · PVG 20:01 · LAX 04:01 · JFK 07:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.