Вычисление месячной разницы в pyspark между отметкой времени и строкой - PullRequest
0 голосов
/ 07 ноября 2019

Я использую pyspark в блоках данных с файлом JSON для очистки данных. Выражение в скобках eval взято из файла JSON.

Одна из проблем, с которыми я сталкиваюсь, заключается в манипулировании timestamp s / string.

Я пытаюсь найтиразница в месяцах между столбцом метки времени и одной датой (которая является строкой)

См. код ниже.

import pyspark.sql.functions as F
df2 = df2.withColumn('test', eval("months_between( F.to_date(F.col('period_name')), lit('31/03/2019'))"))

Не выдает ошибку, а оценивается как ноль.

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Использование eval - плохая практика. Я не вижу в этом необходимости.

Вы можете сохранить гибкость чтения запроса из файла json, используя pyspark.sql.functions.expr вместо

df2 = df2.withColumn(
    'test', 
    expr("months_between(to_date(period_name), to_date('31/03/2019', 'dd/MM/yyyy'))")
)
0 голосов
/ 07 ноября 2019

Просто измените ваш запрос eval на:

df2 = df2.withColumn('test', eval("months_between(F.to_date(F.col('period_name')), F.to_date(F.lit('31/03/2019'), 'dd/MM/yyyy'))"))

Это также преобразует столбец литеральной строки в тип даты.

Если ваша строка date не yyyy-MM-dd,тогда вам нужно будет указать формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...