2017-04-17 7 views
0

私は非常に新しいです。2つの列の値が別のデータフレームにある場合、pysparkに列を追加する方法はありますか?

DF1: enter image description here

DF2: enter image description here

label DF1の列が最初に存在していない私はこのような2つのデータフレームを持っています。私は後でそれを追加しました。 [user_id, sku_id] df1のペアがdf2にある場合は、df1に列を追加し、df1と同様に1に設定します。そうでない場合は0に設定します。どのように私はpysparkでそれを行うことができますか?私はpy2.7を使用しています。

答えて

0

まず、2つのデータフレームに左外部結合を行い、次に右データフレームの列の1つにwhenotherwise関数を使用します。ここで私が試した完全なソリューションがある -

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| 
+------+------+----+-----+ 
関連する問題