嗨,我想創建一個日曆維度包括一個財年財政的4月1日開始。我使用fiscalyear庫,設置開始4月但它堅持設置4月至7月。
12.1運行時
我的代碼snipet是:
start_date = ' 2016-01-01 ' end_date =日期(date.today ()。一年,12日31日)+ relativedelta = 5(年)fiscalyear.setup_fiscal_calendar (start_month = 4) df =火花。sql (f”選擇序列(TO_TIMESTAMP (“{start_date}”), TO_TIMESTAMP (“{end_date}”),間隔為1天)DATETIME”)。withColumn (DATETIME, F.explode (F.col (DATETIME))) #散裝的定義udf udf_f_y = udf(λ細胞:fiscalyear.FiscalDateTime(細胞。年,電池。月,CELL.day .fiscal_year) #財政DateTime對象f_y udf_f_m = udf(λ細胞:fiscalyear.FiscalDateTime(細胞。年,電池。月,CELL.day .fiscal_month) #財政DateTime對象f_m udf_f_m_str = udf(λ細胞:“M”+ str(細胞).zfill(2) 2 #使用zfill變成02和“M”附加到前麵udf_f_q = udf(λ細胞:fiscalyear.FiscalDateTime(細胞。年,電池。月,CELL.day .fiscal_quarter) #財政DateTime對象f_q udf_f_d = udf(λ細胞:fiscalyear.FiscalDateTime(細胞。年,電池。月,CELL.day .fiscal_day) #財政DateTime對象f_d # df = df財政列。withColumn (FISCAL_YEAR_INTEGER udf_f_y (F.col (DATETIME))) df = df。withColumn (FISCAL_QUARTER_INTEGER udf_f_q (F.col (DATETIME))) df = df。withColumn (FISCAL_MONTH_INTEGER udf_f_m (F.col (DATETIME))) df = df。withColumn (FISCAL_DAY_INTEGER udf_f_d (F.col (DATETIME))) df = df。withColumn (“FISCAL_YEAR_STRING”, F。concat_ws (“F。lit("FY"), F.col("FISCAL_YEAR_INTEGER").cast("STRING").substr(3, 4))) df = df.withColumn("FISCAL_QUARTER_STRING", F.concat_ws("_", F.col("FISCAL_YEAR_STRING"), F.concat_ws("", F.lit( "Q" ), F.col("FISCAL_QUARTER_INTEGER")) ) ) df = df.withColumn("FISCAL_MONTH_STRING", F.concat_ws("_", F.col("FISCAL_YEAR_STRING"), udf_f_m_str(F.col("FISCAL_MONTH_INTEGER"))))
不確定它與使用udf和λ細胞因為我手動測試用以下我正確地得到財政月4月1:
從pyspark.sql進口fiscalyear。函數從pyspark.sql進口坳。功能導入to_timestamp # # # #測試fiscalyear圖書館# # # # # #設置財政年度開始4月(4月)fiscalyear。START_MONTH = 4 # #創建FiscalDateTime對象代表df = fiscalyear日曆日期。FiscalDateTime(2023 4 1) #日曆日期轉換為一個財政年度fiscal_year = df。fiscal_year fiscal_month = df。fiscal_month打印(fiscal_year fiscal_month) 2024 1
誰能提供任何見解?謝謝你看。
@Jason約翰遜:
似乎fiscalyear圖書館使用實際上是設置開始月7月(7月)而不是4月(4月)的目的。這或許是一個錯誤或圖書館的已知問題。
為了解決這一問題,您可以手動調整日期的月輸入補償偏移量。例如,你可以減去3月的平移回到4月開始日期:
start_date = ' 2016-01-01 ' start_date = f ' {start_date [5]} {int (start_date [7]) 3:02d} {start_date [7:]}’# start_date為現在“2016-04-01”
同樣,你可以減去3月的財政年度計算得到正確的財政月:
udf_f_m = udf(λ細胞:fiscalyear.FiscalDateTime(細胞。年,電池。月,CELL.day)。fiscal_month - 3)
這些調整,您的代碼應該正確地生成一個日曆維度財年4月開始。