【问题标题】:Populate nulls with user ids with PySpark使用 PySpark 使用用户 ID 填充空值
【发布时间】:2021-04-24 03:15:21
【问题描述】:

我有两个数据框。

一个日期有一个范围,一天中的每个小时都分配给每个日期

+----------+----+
|      date|hour|
+----------+----+
|2020-12-20|   0|
|2020-12-20|   1|
|2020-12-20|   2|
|2020-12-20|   3|
|2020-12-20|   4|
|2020-12-20|   5|
|2020-12-20|   6|
|2020-12-20|   7|
|2020-12-20|   8|
|2020-12-20|   9|

第二个用户有日期和时间,但用户只有几天零几个小时,而不是全部:

+----------------+----------+----+------+
|date            |   user_id|hour|   cnt|
+----------------+----------+----+------+
|      2020-12-20|1234567890|  18|    21|
|      2020-12-20|    123456|   7|     4|
|      2020-12-20|    123456|  11|     1|
|      2020-12-20|1234567890|  14|    19|

我需要一个数据框,其中包含分配给每个用户的所有日期和所有时间。如果在某个时间和/或某天没有某个用户的信息,那么我仍然想显示该用户 ID,但 cnt = 0。 我怎样才能做到这一点?使用左连接,我得到空值。

【问题讨论】:

标签: apache-spark join pyspark apache-spark-sql


【解决方案1】:

您可以仅基于date 进行内连接,然后修改cnt 列以在时间不匹配时显示0:

import pyspark.sql.functions as F

result = (df1.join(df2.withColumnRenamed('hour', 'hour2'), 'date')
             .withColumn('cnt', F.when(F.col('hour') == F.col('hour2'), 
                                       F.col('cnt')).otherwise(0))
             .drop('hour2')
         )

【讨论】:

  • @Sapehi 如果回答有帮助,请点击勾选按钮接受,谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2020-11-29
  • 2023-02-03
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多