mle*_*wis 4 python apache-spark pyspark pyspark-sql
我试图遵循这个答案,但我的问题略有不同。
我有两个 pyspark 数据框df2和bears2. 两者都有一个整数变量,我想创建一个像这个伪代码的布尔值:
df3 = df2.withColumn("game", (df2.week_id.isin(bears2.week_if), 1,0))
Run Code Online (Sandbox Code Playgroud)
基本上,如果 的值df2存在于 的对应列中bears2,我想要一个1else a0
我尝试了expr()另一个问题,但无法使其正常工作。它看起来像这样:
new_column_1 = F.expr(
"""IF(df2.week_id IN(bears2.week_if), 1, 0))"""
)
Run Code Online (Sandbox Code Playgroud)
您目前不能IN像 pyspark-sql 1 那样使用。相反,您必须加入 DataFrame。
尝试类似:
from pyspark.sql.functions import col, when
df3 = df2.withColumn("id", col("week_id")).alias("df2")\
.join(bears2.withColumn("id", col("week_if")).alias("bears2"), on="id", how="left")\
.select("df2.*", when(col("bears2.id").isNotNull(), 1).otherwise(0))
Run Code Online (Sandbox Code Playgroud)
要使连接工作,连接键列必须存在于两个 DataFrame 中。出于这个原因,我首先调用withColumn("id", ...)将列重命名为连接的相同值。
接下来,我们执行 LEFT 连接以将所有列保留在df2. 最后,我们选择所有列df2并用于pyspark.sql.functions.when()创建布尔列。
的第一个参数when()是一个条件。如果是True,则返回第二个参数。如果不是,otherwise()则使用in 的值。
| 归档时间: |
|
| 查看次数: |
8373 次 |
| 最近记录: |