Python 如果两个列值位于另一个数据帧中,如何在pyspark中添加列?

Python 如果两个列值位于另一个数据帧中,如何在pyspark中添加列?,python,python-2.7,apache-spark,pyspark,spark-dataframe,Python,Python 2.7,Apache Spark,Pyspark,Spark Dataframe,我对派斯帕克很陌生。我有两个这样的数据帧: df1: df2: df1中的标签列最初不存在。我后来加的。如果df1的[user\u id,sku\u id]对在df2中,那么我想在df1中添加一列并将其设置为1,否则为0,就像df1显示的那样。我怎样才能在pyspark中完成它?我正在使用py2.7。首先在两个数据帧上进行左外连接,然后在右数据帧的一列上使用和函数。这是我尝试过的完整解决方案- from pyspark.sql import functions as F from pyspa

我对派斯帕克很陌生。我有两个这样的数据帧:

df1:

df2:


df1中的标签列最初不存在。我后来加的。如果df1的
[user\u id,sku\u id]
对在df2中,那么我想在df1中添加一列并将其设置为1,否则为0,就像df1显示的那样。我怎样才能在pyspark中完成它?我正在使用py2.7。

首先在两个数据帧上进行左外连接,然后在右数据帧的一列上使用
函数。这是我尝试过的完整解决方案-

from pyspark.sql import functions as F
from pyspark.sql.functions import col

# this is just data input
data1 = [[4,3,3],[2,4,3],[4,2,4],[4,3,3]]
data2 = [[4,3,3],[2,3,3],[4,1,4]]

# create dataframes
df1 = spark.createDataFrame(data1,schema=['userId','sku_id','type'])
df2 = spark.createDataFrame(data2,schema=['userId','sku_id','type'])

# condition for join
cond=[df1.userId==df2.userId,df1.sku_id==df2.sku_id,df1.type==df2.type]

# magic
df1.join(df2,cond,how='left_outer')\
  .select(df1.userId,df1.sku_id,df1.type,df2.userId.alias('uid'))\
  .withColumn('label',F.when(col('uid')>0  ,1).otherwise(0))\
  .drop(col('uid'))\
  .show()
输出:

+------+------+----+-----+
|userId|sku_id|type|label|
+------+------+----+-----+
|     2|     4|   3|    0|
|     4|     3|   3|    1|
|     4|     3|   3|    1|
|     4|     2|   4|    0|
+------+------+----+-----+