Получить последний день предыдущего месяца без использования udf - PullRequest
1 голос
/ 14 мая 2019

Предположим, у меня есть следующий DataFrame:

import pandas as pd
import numpy as np
np.random.seed(0)
n = 10
months, days = np.random.randint(1, 12, n), np.random.randint(1, 28, n)
df = spark.createDataFrame(
    pd.DataFrame({'date': [pd.datetime(2018, x, y).date() for x, y in zip(months, days)]})
)
df.show()
#+----------+
#|      date|
#+----------+
#|2018-06-24|
#|2018-01-07|
#|2018-04-25|
#|2018-04-25|
#|2018-08-13|
#|2018-10-27|
#|2018-04-02|
#|2018-06-07|
#|2018-03-08|
#|2018-05-24|
#+----------+

Как создать новый столбец с последним днем ​​предыдущего месяца, не используя udf?

1 Ответ

1 голос
/ 14 мая 2019

Одним из способов является использование pyspark.sql.functions.date_sub для вычитания dayOfMonth из столбца date. Для того, чтобы это работало должным образом, вам придется использовать от pyspark.sql.functions.expr до передачи значения столбца в качестве параметра от до date_sub.

from pyspark.sql.functions import expr
df.withColumn("previous_month", expr("date_sub(date, dayOfMonth(date))")).show()
#+----------+--------------+
#|      date|previous_month|
#+----------+--------------+
#|2018-06-24|    2018-05-31|
#|2018-01-07|    2017-12-31|
#|2018-04-25|    2018-03-31|
#|2018-04-25|    2018-03-31|
#|2018-08-13|    2018-07-31|
#|2018-10-27|    2018-09-30|
#|2018-04-02|    2018-03-31|
#|2018-06-07|    2018-05-31|
#|2018-03-08|    2018-02-28|
#|2018-05-24|    2018-04-30|
#+----------+--------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...