[英]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|
+----------+----------+
到目前為止,我可以在不同date
的for
循環中執行以下操作:
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.