У меня есть 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"))
Спасибовы