我有2个spark数据帧,并且我想根据以下条件向数据帧df2中添加名为“ seg”的新列
我尝试了以下在pyspark中的操作,但抛出异常。
cc002 = df2.withColumn('seg',F.when(df2.colx == df1.colx,"True").otherwise("FALSE"))
id colx coly
1 678 56789
2 900 67890
3 789 67854
Name colx
seema 900
yash 678
deep 800
harsh 900
Name colx seg
seema 900 True
harsh 900 True
yash 678 True
deep 800 False
请帮助我纠正给定的pyspark代码或提出更好的方法。
答案 0 :(得分:1)
如果我正确理解了您的问题,您想做的就是这个
res = df2.join(
df1,
on="colx",
how = "left"
).select(
"Name",
"colx"
).withColumn(
"seg",
F.when(F.col(colx).isNull(),F.lit(True)).otherwise(F.lit(False))
)
让我知道这是否是您想要的解决方案。
我的糟糕,我确实写错了代码,以下是已纠正的代码
import pyspark.sql.functions as F
df1 = sqlContext.createDataFrame([[1,678,56789],[2,900,67890],[3,789,67854]],['id', 'colx', 'coly'])
df2 = sqlContext.createDataFrame([["seema",900],["yash",678],["deep",800],["harsh",900]],['Name', 'colx'])
res = df2.join(
df1.withColumn(
"check",
F.lit(1)
),
on="colx",
how = "left"
).withColumn(
"seg",
F.when(F.col("check").isNotNull(),F.lit(True)).otherwise(F.lit(False))
).select(
"Name",
"colx",
"seg"
)
res.show()
+-----+----+-----+
| Name|colx| seg|
+-----+----+-----+
| yash| 678| true|
|seema| 900| true|
|harsh| 900| true|
| deep| 800|false|
+-----+----+-----+
答案 1 :(得分:1)
您可以加入colx
,并用False
填充空值:
result = (df2.join(df1.select(df1['colx'], F.lit(True).alias('seg')),
on='colx',
how='left')
.fillna(False, subset='seg'))
result.show()
输出:
+----+-----+-----+
|colx| Name| seg|
+----+-----+-----+
| 900|seema| true|
| 900|harsh| true|
| 800| deep|false|
| 678| yash| true|
+----+-----+-----+