Ошибка типа: неверный аргумент, а не строка или столбец - PullRequest
0 голосов
/ 31 декабря 2018

Я правильно делаю?У меня есть столбец отметки времени, который я конвертирую в дату первого месяца.

df= df.withColumn("monthlyTransactionDate", f.trunc(df[transactionDate], 'mon').alias('month'))

Затем я запускаю этот код, поскольку хочу сгенерировать все возможные месяцы между минимальной и максимальной датами:

import pyspark.sql.functions as f

minDate, maxDate = df.select(f.min("MonthlyTransactionDate"), f.max("MonthlyTransactionDate")).first()


df.withColumn("monthsDiff", f.months_between(maxDate, minDate))\
    .withColumn("repeat", f.expr("split(repeat(',', monthsDiff), ',')"))\
    .select("*", f.posexplode("repeat").alias("date", "val"))\
    .withColumn("date", f.expr("add_months(minDate, date)"))\
    .select('date')\
    .show(n=50)

Но получите ошибку в начале последнего раздела:

TypeError: Invalid argument, not a string or column: 2016-12-01 of type <type 'datetime.date'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.

1 Ответ

0 голосов
/ 01 января 2019

Здесь

 minDate, maxDate = df.select(f.min("MonthlyTransactionDate"), f.max("MonthlyTransactionDate")).first()  

возвращает минимальное и максимальное значения даты в формате даты. Чтобы использовать точные значения для всех строк, используйте lit() from functions

 df.withColumn("monthsDiff", f.months_between(f.lit(maxDate), f.lit(minDate)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...