Làm cách nào để tìm sự khác biệt giữa hai tháng trong python?

Sử dụng các hàm PySpark SQL datediff(),


+----------+------------+--------+
|      date|current_date|datediff|
+----------+------------+--------+
|2019-07-01|  2021-02-26|     606|
|2019-06-24|  2021-02-26|     613|
|2019-08-24|  2021-02-26|     552|
+----------+------------+--------+
0, bạn có thể tính toán sự khác biệt giữa hai ngày theo ngày, tháng và năm, hãy xem điều này bằng cách sử dụng ví dụ về DataFrame. Bạn cũng có thể sử dụng chúng để tính tuổi

hàm dateiff()

Trước tiên, hãy xem sự khác biệt giữa hai ngày bằng cách sử dụng hàm PySpark của datediff()


from pyspark.sql.functions import *
data = [("1","2019-07-01"),("2","2019-06-24"),("3","2019-08-24")]
df=spark.createDataFrame(data=data,schema=["id","date"])

df.select(
      col("date"),
      current_date().alias("current_date"),
      datediff(current_date(),col("date")).alias("datediff")
    ).show()

đầu ra


+----------+------------+--------+
|      date|current_date|datediff|
+----------+------------+--------+
|2019-07-01|  2021-02-26|     606|
|2019-06-24|  2021-02-26|     613|
|2019-08-24|  2021-02-26|     552|
+----------+------------+--------+

Hàm months_between()

Bây giờ, hãy xem cách lấy chênh lệch tháng và năm giữa hai ngày bằng cách sử dụng hàm


+----------+------------+--------+
|      date|current_date|datediff|
+----------+------------+--------+
|2019-07-01|  2021-02-26|     606|
|2019-06-24|  2021-02-26|     613|
|2019-08-24|  2021-02-26|     552|
+----------+------------+--------+
0


from pyspark.sql.functions import *
df.withColumn("datesDiff", datediff(current_date(),col("date"))) \
  .withColumn("montsDiff", months_between(current_date(),col("date"))) \
  .withColumn("montsDiff_round",round(months_between(current_date(),col("date")),2)) \
  .withColumn("yearsDiff",months_between(current_date(),col("date"))/lit(12)) \
  .withColumn("yearsDiff_round",round(months_between(current_date(),col("date"))/lit(12),2)) \
  .show()

Sản lượng dưới sản lượng. Lưu ý rằng ở đây chúng tôi sử dụng hàm round() và hàm lit() ở đầu months_between() để lấy năm giữa hai ngày


+---+----------+---------+-----------+---------------+------------------+---------------+
| id|      date|datesDiff|  montsDiff|montsDiff_round|         yearsDiff|yearsDiff_round|
+---+----------+---------+-----------+---------------+------------------+---------------+
|  1|2019-07-01|      606|19.80645161|          19.81|1.6505376341666667|           1.65|
|  2|2019-06-24|      613|20.06451613|          20.06|1.6720430108333335|           1.67|
|  3|2019-08-24|      552|18.06451613|          18.06|1.5053763441666668|           1.51|
+---+----------+---------+-----------+---------------+------------------+---------------+

Hãy xem một ví dụ khác về sự khác biệt giữa hai ngày khi ngày không ở định dạng PySpark DateType


+----------+------------+--------+
|      date|current_date|datediff|
+----------+------------+--------+
|2019-07-01|  2021-02-26|     606|
|2019-06-24|  2021-02-26|     613|
|2019-08-24|  2021-02-26|     552|
+----------+------------+--------+
1. khi ngày không ở định dạng DateType, tất cả các hàm ngày trả về giá trị rỗng. Do đó, trước tiên bạn cần chuyển đổi ngày đầu vào thành Spark DateType bằng hàm

+----------+------------+--------+
|      date|current_date|datediff|
+----------+------------+--------+
|2019-07-01|  2021-02-26|     606|
|2019-06-24|  2021-02-26|     613|
|2019-08-24|  2021-02-26|     552|
+----------+------------+--------+
2


from pyspark.sql.functions import *
data2 = [("1","07-01-2019"),("2","06-24-2019"),("3","08-24-2019")]  
df2=spark.createDataFrame(data=data2,schema=["id","date"])
df2.select(
    to_date(col("date"),"MM-dd-yyyy").alias("date"),
    current_date().alias("endDate")
    )

Ví dụ SQL

Hãy xem cách tính chênh lệch giữa hai ngày tính theo năm bằng ví dụ SQL PySpark. tương tự, bạn có thể tính ngày và tháng giữa hai ngày


spark.sql("select round(months_between('2019-07-01',current_date())/12,2) as years_diff").show()

Hoàn thành mã

________số 8

Sự kết luận

Trong hướng dẫn này, bạn đã học cách tính ngày, tháng và năm giữa hai ngày bằng cách sử dụng các hàm PySpark Date và Time dateiff(), months_between(). Bạn có thể tìm thêm thông tin về các chức năng này tại blog sau