python - 在 Spark 数据框中添加截止日期列

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

我有一个场景,我想将月份添加到 spark DataFrame 中的日期列,它有两列数据类型为 (Date, Int)

例如

df.show()
data_date months_to_add
2015-06-23 5
2016-07-20 7

我想添加一个有新日期的新列(在现有日期上添加几个月后),输出如下所示-

data_date month_to_add new_data_date
2015-06-23 5           2015-11-23
2016-07-20 1           2016-8-20

我试过下面的一段代码,但它似乎不起作用-

df = df.withColumn("new_data_date", a
  dd_months(col("data_date"), col("months_to_add")))

它给我错误-

'Column' object is not callable

如果有任何方法可以在不在数据框之上使用 SQL 查询的情况下实现这一点,请帮助我。

最佳答案

我会使用 expr:

from pyspark.sql.functions import expr

df = spark.createDataFrame(
    [("2015-06-23", 5), ("2016-07-20", 7)],
    ("data_date", "months_to_add")
).select(to_date("data_date").alias("data_date"), "months_to_add")

df.withColumn("new_data_date", expr("add_months(data_date, months_to_add)")).show()

+----------+-------------+-------------+
| data_date|months_to_add|new_data_date|
+----------+-------------+-------------+
|2015-06-23|            5|   2015-11-23|
|2016-07-20|            7|   2017-02-20|
+----------+-------------+-------------+

关于python - 在 Spark 数据框中添加截止日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45612208/

相关文章:

python - 如何在 Pyspark 中将行分成多行

python - 为独立应用程序导入 pyspark

apache-spark - 如何重命名 pyspark 中的列,类似于使用 Spark 兼容的 SQL PIVOT 语句?

python - 更新 Pyspark 中 map 类型列的结构化值

python panda通过删除重复项加入动态列

python - Flask:在 URL 中使用 URL 绑定(bind)?

python - Tensorflow:在 CPU 中使用在 CUDNNLSTM 中训练的模型

python - Kivy - 从 python 端更新 kv 代码中的标签

elasticsearch - PySpark + ElasticSearch:读取多个索引/类型

apache-spark - Pyspark 内存问题