pyspark - генерирующая последовательность дат - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь сгенерировать последовательность дат

df1 = df.withColumn("start_dt" ,F.to_date(F.col("start_date"),"yyyy-mm-dd")).withColumn("end_dt", F.to_date(F.col("end_date"),"yyyy-mm-dd"))
df1.select("start_dt","end_dt").show()

print("type(start_dt) ",type("start_dt"))
print("type(end_dt) " ,type("end_dt"))
df2 =df1.withColumn("lineoffdate", F.expr("""sequence(start_dt,end_dt,1)"""))

** Ниже выводится

+----+----------+----------+
|   start_date  |  end_date|
+----+----------+----------+
|   2020-02-01  |2020-03-21|
+-------------------+------+

type(start_dt)  <class 'str'>
type(end_dt)  <class 'str'>

невозможно разрешить 'последовательность (start_dt, end_dt , 1) 'из-за несоответствия типов данных: последовательность поддерживает только целочисленный тип, отметку времени или дату; строка 1, позиция 0;

Даже после преобразования начального dt и конечного dt в дату или метку времени, я вижу тип столбца все еще str и получаю вышеупомянутую ошибку при генерации последовательности дат.

1 Ответ

1 голос
/ 17 марта 2020

Вы правы, говоря, что он должен работать с date или timestamp (типами календаря), однако единственная ошибка, которую вы допустили, заключалась в том, что вы помещали "step" в sequence как integer, когда это должен быть календарный интервал (например, interval 1 day):

df.withColumn("start_date",F.to_date("start_date")).withColumn("end_date", F.to_date("end_date"))\
    .withColumn("lineofdate", F.expr("""sequence(start_date,end_date,interval 1 day)""")).show()


+----------+----------+--------------------+
|start_date|  end_date|          lineofdate|
+----------+----------+--------------------+
|2020-02-01|2020-03-21|[2020-02-01, 2020...|
+----------+----------+--------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...