簡體   English   中英

pyspark中的以下情況如何使用if條件?

[英]how to use if condition for the following case in pyspark?

我正在使用 pyspark dataframe ,如下所示:

df1:

+-----------+-------+------------+----------+
|parsed_date|     id|       count|      date|
+-----------+-------+------------+----------+
| 2018-01-16|1520036|        1277|2018-01-17|            
| 2018-01-14|1516457|         767|2018-01-17|           
| 2018-01-15|1518451|        1074|2018-01-17|          
| 2018-01-24|1536787|        1306|2018-01-27|            
| 2018-01-25|1537211|        1105|2018-01-27|            
| 2018-01-26|1539203|        1100|2018-01-27|      
| 2019-01-03|2325105|        1298|2019-01-16| 
+-----------+-------+------------+----------+

我想sum同一date的所有count

df2:

+----------+----------+
|      date|      sum |
+----------+----------+
|2018-01-17|      3118|      
|2018-01-27|      3511|           
|2019-01-16|      1298|    
+----------+----------+

到目前為止,我可以在不同datefor循環中執行以下操作:

df1_list = []
for d in date_list:
    df1= my_func(df, d)
    
    df1 = df1.withColumn("sum", F.sum("count").over(Window.partitionBy("date")))
  
    df1_list.append(df1)

full_df1 = reduce(DataFrame.unionAll, df1_list)

但是現在可能會出現 df1 中沒有記錄的日期(或者假設 df1 中沒有某個日期)的情況,所以我想將sum添加為零,如下所示:

預期 output:

示例 -> 2019-01-18 2019-01-16 2018-01-27 2018-01-17

+----------+----------+
|      date|      sum |
+----------+----------+
|2018-01-17|      3118|      
|2018-01-27|      3511|           
|2019-01-16|      1298| 
|2019-01-18|         0|
+----------+----------+

在進行新列sum以完成此操作時,如何使用if條件(或任何其他邏輯)?

您可以從date_list創建 dataframe 並在 group by 和 sum 之前對df進行左連接:

import pyspark.sql.functions as F

date_list = ['2018-01-17', '2018-01-27', '2019-01-16', '2019-01-18']
date_df = spark.createDataFrame([[d] for d in date_list], 'date string')

result = (date_df.join(df, 'date', 'left')
                 .fillna(0, 'count')
                 .groupBy('date')
                 .agg(F.sum('count').alias('sum'))
         )

result.show()
+----------+----+
|      date| sum|
+----------+----+
|2018-01-17|3118|
|2019-01-16|1298|
|2018-01-27|3511|
|2019-01-18|   0|
+----------+----+

暫無
暫無

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

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