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

2018-05-24 22:48:25 +08:00
 cqcn1991

实在是对 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()

返回结果如图

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

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

想问下可以怎么做?

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

2147 次点击
所在节点    问与答
1 条回复
zhusimaji
2018-05-25 07:57:11 +08:00
可以看官方文档,都有例子的,给楼主贴个,使用 select 方法选择字段
>>> df.join(df2, 'name').select(df.name, df2.height).collect()
[Row(name='Bob', height=85)]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/457583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX