Pyspark减法而不选择列

时间:2018-06-11 17:16:16

标签: apache-spark pyspark pyspark-sql

我有两张桌子

  1. 订单 - 包含以下列

    order_id,order_date,order_customer_id,order_status

  2. 客户 - 拥有以下列

    customer_id,customer_fname,customer_lname

  3. 我想使用dataframe编写代码,这相当于在不创建表

    的情况下执行以下sql查询
    SELECT customer_fname, customer_lname
    FROM  customer
    WHERE customer_id NOT IN (SELECT order_customer_id
                              from order)
    

    我怎样才能实现这一点。

1 个答案:

答案 0 :(得分:1)

来自pyspark v2.1.1:

使用'left_anti'联接删除另一个表中的元素:

df_result = df_customers.join(df_orders, df_customers.customer_id == df_orders.order_customer_id, 'left_anti')
df_result = df_result.select('customer_fname', 'customer_lname')

在pyspark v2.1.1之前:

使用'left_outer'连接并删除空值:

df_result = df_customers.join(df_orders, df_customers.customer_id == df_orders.order_customer_id, 'left_outer')
df_result = df_result.where('order_id is null')
df_result = df_result.select('customer_fname', 'customer_lname')