繁体   English   中英

在 Pyspark 数据帧上左连接和应用案例逻辑

[英]Left Join and apply case logic on Pyspark Dataframes

我正在学习编码 PySpark。 我可以通过构建 SQL 来加入两个数据框,就像使用.createOrReplaceTempView()在它们上面的views一样,并获得我想要的 output。 但是我想通过直接在 dataframe 上操作而不是创建views来学习如何做同样的事情。

这是我的代码

df1.createOrReplaceTempView('left_table')
df2.createOrReplaceTempView('right_table')

    spark.sql('''
    select
    l.*,
    CASE WHEN r.id IS NULL THEN current_timestamp() ELSE r.timestamp END ts,
    from
    left_table l 
    left join 
    right_table r
    on l.id = r.id 
    ''').show()

为了匹配id ,我希望从右表中获取timestamp列。 对于仅在左表中可用的id ,我想使用系统时间戳,使用current_timestamp()作为最终列值。

我如何通过直接在数据帧df1df2上操作而不是构建视图来实现这一点?

您可以进行左连接,然后将 NULL 时间戳与当前时间戳合并:

import pyspark.sql.functions as F

df1.join(df2, 'id', 'left') \
   .drop(*[col for col in df2.columns if col != 'timestamp']) \
   .withColumn('timestamp', F.coalesce(F.col('timestamp'), F.current_timestamp()))
   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM