【发布时间】:2018-01-19 20:28:34
【问题描述】:
我有以下数据框:
+----------+
| date|
+----------+
|2017-01-25|
|2017-01-21|
|2017-01-12|
+----------+
下面是创建上面DataFrame的代码:
import pyspark.sql.functions as f
rdd = sc.parallelize([("2017/11/25",), ("2017/12/21",), ("2017/09/12",)])
df = sqlContext.createDataFrame(rdd, ["date"]).withColumn("date", f.to_date(f.col("date"), "yyyy/MM/dd"))
df.show()
我想要一个新列,每行包含月份的第一个日期,只需将所有日期中的日期替换为“01”
+----------++----------+
| date| first_date|
+----------++----------+
|2017-11-25| 2017-11-01|
|2017-12-21| 2017-12-01|
|2017-09-12| 2017-09-01|
+----------+-----------+
PySpark.sql.function 中有 last_day 函数,但是没有 first_day 函数。
我尝试使用 date_sub 来执行此操作,但没有成功:我收到 column not Iterable 错误,因为 date_sub 的第二个参数不能是列并且必须是整数。
f.date_sub(f.col('date'), f.dayofmonth(f.col('date')) - 1 )
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql