2017-04-17 1 views
0

Ich bin sehr neu in Pyspark. Ich habe zwei Datenrahmen wie folgt aus:Wie füge ich eine Spalte in pyspark hinzu, wenn sich zwei Spaltenwerte in einem anderen Datenrahmen befinden?

df1: enter image description here

df2: enter image description here

label Spalte in df1 existiert nicht auf den ersten. Ich habe es später hinzugefügt. Wenn [user_id, sku_id] Paar von DF1 ist in DF2, dann möchte ich eine Spalte in DF1 hinzufügen und setzen Sie es auf 1, sonst 0, genau wie df1 zeigt. Wie kann ich es in Pyspark machen? Ich benutze py2.7.

Antwort

0

Dies ist möglich, indem linke Outer Join auf zwei Datenrahmen zuerst und dann mit when und otherwise Funktionen auf einer der Spalten des rechten Datenframe. hier ist komplette Lösung, die ich versucht -

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() 

Ausgang:

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