簡體   English   中英

如果兩個數據列值在另一個數據框中,如何在pyspark中添加一列?

[英]How to add a column in pyspark if two column values is in another dataframe?

我是pyspark的新手。 我有兩個這樣的數據框:

df1: 在此處輸入圖片描述

df2: 在此處輸入圖片描述

df1中的label列最初不存在。 我稍后添加。 如果df1中的[user_id, sku_id]對位於df2中,那么我想在df1中添加一列並將其設置為1,否則為0,就像df1所示。 如何在pyspark中做到這一點? 我正在使用py2.7。

可以通過首先在兩個數據幀上進行左外部聯接,然后when右數據幀的一列上使用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|
+------+------+----+-----+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM