фильтровать записи столбцов даты в кадре данных pySpark - PullRequest
0 голосов
/ 30 января 2020

У меня есть входные данные в следующем формате: dataframe df_date :

col1, col2, extraction_date, col3
010, DSL, 20191201235900, VDRAC
010, DSL, 20191203235900, VDRAC
010, DSL, 20191205235900, VDRAC
010, DSL, 20200120235900, VDRAC
010, DSL, 20200128235900, VDRAC
010, DSL, 20200129235900, VDRAC
010, DSL, 20200129235900, VDRAC
(string, string, bitint(longtype), string) # I have added the data type of each column for reference)

Когда я хочу обработать старую дату, учитывайте только записи до 29-го. Мне нужно отфильтровать его и применить бизнес-условие.

import datetime
var = '28-01-2020'
ref_date = datetime.datetime.strptime(var, '%d-%m-%Y').date()   #converting input ref date arg to date format
df_fil_date = df_data.filter(df_date.extraction_date.leq(ref_date))

Показывает мне ошибку, потому что извлечение_дата из источника - это long_type (bitint), а переменная ref_date имеет формат даты.

Не могли бы вы проверить и сообщить мне, как фильтровать данные на основе переданной переменной даты?

1 Ответ

0 голосов
/ 31 января 2020

Вам нужно будет привести столбец к типу даты, чтобы выполнить любые виды проверок с другими столбцами даты.

clm_name = 'extraction_date'
input_format = 'yyyyMMddHHmmss'
outputformat = 'MM-dd-yyyy HH:mm:ss'
df_data = df_data.withColumn(clm_name, (unix_timestamp( df_data[extraction_date], input_format )))
df_data = df_data.withColumn(clm_name, from_unixtime( df_data[extraction_date], outputformat))
df_data = df_data.withColumn(clm_name, to_timestamp( df_data[clm_name], outputformat).cast('date'))

Вместо приведения к 'date' вместо него можно использовать 'timestamp', чтобы информация о времени не теряется во время приведения, но опять же вам понадобится другой столбец типа 'timestamp'. Чтобы отфильтровать дату,

var = '2020-01-28'
df_fil_date = df_data.filter(df_date.extraction_date < lit(var).cast('date'))
...