我有这样的数据:
df = sqlContext.createDataFrame([
('1986/10/15', 'z', 'null'),
('1986/10/15', 'z', 'null'),
('1986/10/15', 'c', 'null'),
('1986/10/15', 'null', 'null'),
('1986/10/16', 'null', '4.0')],
('low', 'high', 'normal'))
我想计算 low
列和 2017-05-02
之间的日期差异,并用差异替换 low
列。我已经在 stackoverflow 上尝试过相关的解决方案,但它们都不起作用。
最佳答案
您需要将列 low
转换为类日期,然后您可以将 datediff()
与 lit()
结合使用。使用 Spark 2.2:
from pyspark.sql.functions import datediff, to_date, lit
df.withColumn("test",
datediff(to_date(lit("2017-05-02")),
to_date("low","yyyy/MM/dd"))).show()
+----------+----+------+-----+
| low|high|normal| test|
+----------+----+------+-----+
|1986/10/15| z| null|11157|
|1986/10/15| z| null|11157|
|1986/10/15| c| null|11157|
|1986/10/15|null| null|11157|
|1986/10/16|null| 4.0|11156|
+----------+----+------+-----+
使用 low
列转换为 timestamp
类:
from pyspark.sql.functions import datediff, to_date, lit, unix_timestamp
df.withColumn("test",
datediff(to_date(lit("2017-05-02")),
to_date(unix_timestamp('low', "yyyy/MM/dd").cast("timestamp")))).show()
关于python - 如何计算pyspark中的日期差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44020818/