我有一个包含一些列的数据框:
+------------+--------+----------+----------+
|country_name| ID_user|birth_date| psdt|
+------------+--------+----------+----------+
| Россия|16460783| 486|1970-01-01|
| Россия|16467391| 4669|1970-01-01|
| Россия|16467889| 6861|1970-01-01|
| Казахстан|16468013| 5360|1970-01-01|
| Россия|16471027| 6311|1970-01-01|
| Россия|16474162| 5567|1970-01-01|
| Россия|16476386| 4351|1970-01-01|
| Россия|16481067| 3831|1970-01-01|
| Казахстан|16485965| -2369|1970-01-01|
| Германия|16486027| 5864|1970-01-01|
+------------+--------+----------+----------+
only showing top 10 rows
字符串
我需要添加带有“birth_date”的“psdt”。我写了以下代码,但(sf.date_add)不起作用:
resultbirthDF =(
resultDF
.select(sf.col("country_name"),
sf.col("ID_user"),
sf.col("birth_date"),
sf.lit(past_datetr).alias("psdt")
)
.withColumn("birth_datetrue",sf.date_add(sf.to_date(sf.col("psdt")),sf.col("birth_date")))
).show(10)
'Column' object is not callable
Traceback (most recent call last):
File "/volumes/disk1/yarn/local/usercache/livy/appcache/application_1573843665329_0786/container_e05_1573843665329_0786_01_000001/pyspark.zip/pyspark/sql/functions.py", line 1006, in date_add
return Column(sc._jvm.functions.date_add(_to_java_column(start), days))
型
如何解决这一问题?
2条答案
按热度按时间wwodge7n1#
来自Pyspark文档
pyspark.sql.functions.date_add(start,days)
字符串
尝试将您的代码更改为
sf.date_add(sf.to_date(sf.col("psdt")), 10)
,看看是否添加了10天。date_add
期望第一个参数是一个列,第二个参数是一个整数(* 表示您希望添加到列中的天数 *)。不需要自定义项,只需要使用SQL表达式就可以完成您的任务,如下所示:
型
输出示例:
型
gdrx4gfi2#
从Spark Python API 3.3.0开始,你可以使用date_add和列类型作为第二个参数:https://spark.apache.org/docs/3.3.0/api/python/_modules/pyspark/sql/functions.html#date_add
所以你的原始代码在问题中不会出现任何错误。