假設您有 PySpark 資料框,其中包含一個整數型別列days和一個日期型別列,start如下所示:
start days
--------------------------------------
2021-04-08 02:49:09 8
2021-04-08 02:49:09 9
2020-05-05 08:43:02 7
我想成為一個end看起來像這樣的新專欄:
start days end
---------------------------------------------------------
2021-04-08 02:49:09 8 2021-04-16 02:49:09
2021-04-08 02:49:09 9 2021-04-17 02:49:09
2020-05-05 08:43:02 7 2020-05-12 08:43:02
uj5u.com熱心網友回復:
您可以轉換days為IntervalType然后將其添加到start列中。
from pyspark.sql import functions as F
data = [("2021-04-08 02:49:09", 8), ("2021-04-08 02:49:09", 9, ), ("2020-05-05 08:43:02", 7, )]
df = spark.createDataFrame(data, ("start", "days")).withColumn("start", F.to_timestamp("start", 'yyyy-MM-dd HH:mm:ss'))
df.withColumn("end", F.col("start") F.concat(F.col("days"), F.lit(" days")).cast("interval")).show()
輸出
------------------- ---- -------------------
| start|days| end|
------------------- ---- -------------------
|2021-04-08 02:49:09| 8|2021-04-16 02:49:09|
|2021-04-08 02:49:09| 9|2021-04-17 02:49:09|
|2020-05-05 08:43:02| 7|2020-05-12 08:43:02|
------------------- ---- -------------------
uj5u.com熱心網友回復:
使用date_add函式添加天數并將小時部分連接到結果日期:
from pyspark.sql import functions as F
df2 = df.withColumn(
"end",
F.concat(
F.expr("date_add(start, days)"),
F.date_format("start", " HH:mm:ss")
).cast("timestamp")
)
df2.show()
# ------------------- ---- -------------------
#|start |days|end |
# ------------------- ---- -------------------
#|2021-04-08 02:49:09|8 |2021-04-16 02:49:09|
#|2021-04-08 02:49:09|9 |2021-04-17 02:49:09|
#|2020-05-05 08:43:02|7 |2020-05-12 08:43:02|
# ------------------- ---- -------------------
uj5u.com熱心網友回復:
用日期來做到這一點實際上很容易,但保持時間更難。我們使用 sql 運算式,以便我們可以讓列一起播放。在這里,我使用大量空格進行格式化。(下面的可運行代碼)
import pyspark.sql.functions as F
df = spark.createDataFrame(
[
("2021-04-08 02:49:09",8),
("2021-04-08 02:49:09",9),
("2020-05-05 08:43:02",7
],
[
"start",
"days"
]
)
df.withColumn(
'end',
F.to_timestamp(
F.expr("date_add(start,days) || ' ' ||split(start,' ')[1]")
)
).show()
------------------- ---- -------------------
| start|days| end|
------------------- ---- -------------------
|2021-04-08 02:49:09| 8|2021-04-16 02:49:09|
|2021-04-08 02:49:09| 9|2021-04-17 02:49:09|
|2020-05-05 08:43:02| 7|2020-05-12 08:43:02|
------------------- ---- -------------------
可運行格式的代碼
df = spark.createDataFrame([("2021-04-08 02:49:09",8),("2021-04-08 02:49:09",9),("2020-05-05 08:43:02",7)],["start","days"])
import pyspark.sql.functions as F
df.withColumn('end',F.to_timestamp(F.expr("date_add(start,days) || ' ' ||split(start,' ')[1]"))).show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/385024.html
標籤:Python 阿帕奇火花 日期 火花 apache-spark-sql
上一篇:如何從Prometheus服務器獲取按特定標簽過濾的所有指標名稱
下一篇:在kotlin中將字串轉換為日期
