我有一个初始的PySpark Dataframe ,我想从日期列中取出MIN和MAX,然后使用初始 Dataframe 中的MIN和MAX创建一个新的带有时间序列(每日日期)的PySpark Dataframe 。我将使用它来连接我的初始 Dataframe ,并查找丢失的日期(在我的初始DF列的其余部分为空)。我尝试了许多不同的方法来构建时间序列DF,但它似乎在PySpark中不起作用。有什么建议吗
MIN
MAX
mjqavswn1#
Max列的值可以这样提取:
df.agg(F.max('col_name')).head()[0]
字符串可以像这样创建日期范围df:
df2 = spark.sql("SELECT explode(sequence(to_date('2000-01-01'), to_date('2000-02-02'), interval 1 day)) as date_col")
型然后是join。完整示例:
join
from pyspark.sql import functions as F df1 = spark.createDataFrame( [(1, '2022-04-01'), (2, '2022-04-05')], ['id', 'df1_date']) min_date = df1.agg(F.min('df1_date')).head()[0] max_date = df1.agg(F.max('df1_date')).head()[0] df2 = spark.sql(f"SELECT explode(sequence(to_date('{min_date}'), to_date('{max_date}'), interval 1 day)) as df2_date") df3 = df2.join(df1, df1.df1_date == df2.df2_date, 'left') df3.show() # +----------+----+----------+ # | df2_date| id| df1_date| # +----------+----+----------+ # |2022-04-01| 1|2022-04-01| # |2022-04-02|null| null| # |2022-04-03|null| null| # |2022-04-04|null| null| # |2022-04-05| 2|2022-04-05| # +----------+----+----------+
型
1条答案
按热度按时间mjqavswn1#
Max列的值可以这样提取:
字符串
可以像这样创建日期范围df:
型
然后是
join
。完整示例:
型