我在 PySpark 中加載的表格有一列“日期”,其中包含以下型別的資料:
| 日期 | 打開 | 高的 | 低的 | 關閉 | 體積 | 調整關閉 |
|---|---|---|---|---|---|---|
| 2012 年 1 月 3 日 | 59.97 | 61.06 | 59.87 | 60.33 | 12668800 | 52.61923 |
| 2012 年 1 月 4 日 | 60.21 | 60.35 | 59.47 | 59.71 | 9593300 | 52.07848 |
| 2012 年 1 月 5 日 | 59.35 | 59.62 | 58.37 | 59.42 | 12768200 | 51.82554 |
| 2012 年 1 月 6 日 | 59.42 | 59.45 | 58.87 | 59 | 8069400 | 51.45922 |
如何計算列的最大值和最小值之間的天數差異(因此在上面的示例中,我需要 2012 年 1 月 6 日和 2012 年 1 月 3 日之間的天數差異
uj5u.com熱心網友回復:
測驗資料:
from pyspark.sql import functions as F
df = spark.createDataFrame([('2012-01-03',),('2013-02-03',),('2011-11-29',)], ['Date']).select(F.col('Date').cast('date'))
df.show()
# ----------
# | Date|
# ----------
# |2012-01-03|
# |2013-02-03|
# |2011-11-29|
# ----------
這將創建一個包含天數差異的新資料框:
df_diff = df.groupBy().agg(F.datediff(F.max('Date'), F.min('Date')).alias('diff'))
df_diff.show()
# ----
# |diff|
# ----
# | 432|
# ----
# If you need the difference in a variable:
v = df_diff.head().diff
print(v)
# 432
這將為您現有的 df 添加一個新列:
df = df.withColumn('diff', F.expr('datediff(max(Date) over(), min(Date) over())'))
df.show()
# ---------- ----
# | Date|diff|
# ---------- ----
# |2012-01-03| 432|
# |2013-02-03| 432|
# |2011-11-29| 432|
# ---------- ----
uj5u.com熱心網友回復:
假設您的資料框df只有Date日期格式的列,您可以執行以下操作:
from pyspark.sql import functions as F
(df.withColumn('Max_Date', F.max(F.col('Date')))
.withColumn('Min_Date', F.min(F.col('Date')))
.withColumn('Diff_days', F.datediff(F.col('Max_Date'), F.col('Min_Date')))
.drop('Date').dropDuplicates())
在此鏈接中,您可以找到有關 pyspark 的 sql 函式的更多示例: https ://sparkbyexamples.com/spark/spark-sql-functions/
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/465422.html
標籤:阿帕奇火花 日期 pyspark apache-spark-sql 日期差异
上一篇:從日期python獲取周數
