Сравнение дат между фреймами данных - используя pyspark - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть 2 фрейма данных, один содержит транзакции и имеет следующие атрибуты:

trxId, publishedDate and many other columns

Существует еще один фрейм данных, называемый контрольным фреймом данных, который имеет следующее:

controlRecordId, sequence, start, end

По сути, янеобходимо получить значение «sequence» из контрольного фрейма данных, но соединение между ними должно быть:

trx.publishedDate между controlRecord.start и controlRecord.end

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

Допущения:

(1) контрольные записи не будут перекрываться.Это означает, что для данного времени будет только одна запись

(2) существует высокая вероятность того, что соответствующая контрольная запись недоступна для данной даты.(из-за, скажем, временных проблем).В этом случае результирующий фрейм данных должен по-прежнему возвращать строку , но с пустым значением "sequence"

(3). Таким образом, в приведенном ниже примере количество строк trxDf и resultDf должновсегда будет одинаковым, даже если было найдено соответствующее значение «sequence» или нет

resultDf = trxDf.join(controlRecordsDf, controlRecordsDf.start <= trxDf.publishedDate & controlRecordsDf.end > trxDf.publishedDate), 'left_outer')

Если вышеприведенное сработает, я в конечном итоге воспользуюсь этим - исключительно для справки.

resultDf = trxDf.join(controlRecordsDf, controlRecordsDf.start <= trxDf.publishedDate & controlRecordsDf.end > trxDf.publishedDate), 'left_outer').select(trxDf["*"], controlRecordsDf["sequence"].alias("sequence"))

Спасибовы

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