python - 如何计算pyspark中的日期差异?

标签 python apache-spark dataframe pyspark apache-spark-sql

我有这样的数据:

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/

相关文章:

python - 连接几个股票价格数据框

hadoop - Spark 将本地文件从主节点分发到节点

performance - Spark中如何获取从hdfs读取数据的时间成本

python - 根据 Pandas 上的列值应用 lambda

python - 如何将图例移动到 seaborn 散点图之外?

python - 字符串变量只是拒绝变成一个整数

Python:对音乐文件执行 FFT

scala - 来自值列表的循环数,在 Spark 和 Scala 中是正数和负数的混合

python - F.monotonicly_increasing_id() 返回长随机数

r - 创建返回行名称和最大值的函数