#filter #pyspark #partition
#Фильтр #pyspark #раздел
Вопрос:
Я хочу отфильтровать паркет, разделенный по дате. Когда я применяю фильтр
.filter(col('DATE')>= '2020-08-01')
При выполнении фильтрации значение преобразуется 2020-08-01
в строку, как показано на физическом плане. Я читал, что это неэффективно и приводит к полному сканированию файлов.
Фильтры разделов: [isnotnull(ДАТА# 5535), (приведение (ДАТА# 5535 в виде строки) >= 2020-08-01)]
Как мне использовать string
as date
в предложении filter? Во всех примерах в Интернете упоминается использовать to_date
, но это работает только для столбцов. Возможно ли это или даже стоит того? Пожалуйста, сообщите. Спасибо
Ответ №1:
Попробуйте это —
import pyspark.sql.functions as F
.filter(F.expr(" `Date` >= to_date('2020-08-01','yyyy-MM-dd' )"))
Комментарии:
1. Я пробовал это, но получаю следующую ошибку:
nextraneous input '<EOF>' expecting {')', ','}(line 1, pos 45)nn== SQL ==n
DATE` >= to_date(‘2020-08-01′,’гггг-ММ-дд’ n———————————————^^^ н»`2. @thentangler отсутствует
)
в конце предложения. Исправлено IMO.3. Спасибо, двойные кавычки на самом деле после первой закрывающей скобки. Для меня сработало следующее:
f.expr(" `DATE` >= to_date('2020-08-01', 'yyyy-MM-dd' ) ") )