У меня есть фрейм данных PySpark (2.3.0) со столбцом типа отметки времени:
>> df.show()
+-------------------+
| column |
+-------------------+
|2004-02-16 12:01:37|
|2004-02-23 10:28:49|
|2004-02-23 12:49:14|
|2004-02-26 12:29:58|
|2004-03-02 10:10:28|
|2004-03-03 03:40:13|
|2004-03-16 05:00:10|
|2004-03-16 03:28:21|
|2004-03-17 02:45:22|
|2004-03-23 08:14:47|
+-------------------+
>> df.printSchema()
root
|-- column: timestamp (nullable = true)
Я хочу отфильтровать этот фрейм данных, чтобы найти записи на определенную дату:
import datetime
date = datetime.datetime.strptime('2018-06-07', '%Y-%m-%d').date()
* 1006Какой метод фильтрации наиболее эффективен?
Примечание : данные считываются через JDBC, поэтому они могут не распространяться.
Вот что я пробовал (не заметил существенных различий), что предпочтительнее?Я что-нибудь пропустил?
Способ 1: приведение к дате
df.filter(psf.col('column').cast('date') == date)
Способ 2: совпадение по году, месяцу, дню месяца
import pyspark.sql.functions as psf
(
df
.filter(psf.dayofmonth('column') == date.day)
.filter(psf.month('column') == date.month)
.filter(psf.year('column') == date.year)
)