Значения Date
и Timestamp
в вашем основном Dataframe, похоже, не совпадают, поэтому я собираюсь использовать столбец Date
в обоих DataFrames (в любом случае менее подверженных ошибкам) и применять unix_timestamp
сравнить разницу во времени как условие join
:
val lookup = Seq(
(37.9, "01/29/2008 5:53 AM")
).toDF("TemperatureF", "Date")
val master = Seq(
(35.1, "01/29/2008 4:53 AM", 1201582380, -11.0, 39.2),
(37.9, "01/29/2008 5:53 AM", 1201585980, -11.9, 39.2),
(-11.0, "01/30/2008 4:53 AM", 1201668780, -11.9, 1.9),
(-11.0, "01/30/2008 5:53 AM", 1201672380, -11.9, 1.9),
(-11.9, "01/30/2008 6:53 AM", 1201675980, -11.9, 1.9)
).toDF("TemperatureF", "Date", "Timestamp", "MinTemp", "MaxTemp")
val dateFormat = "MM/dd/yyyy HH:mm a"
val deltaTime = 60 * 60 * 24
master.join(
lookup,
unix_timestamp(master("Date"), dateFormat) - unix_timestamp(lookup("Date"), dateFormat)
between (0, deltaTime)
).show
// +------------+------------------+----------+-------+-------+------------+------------------+
// |TemperatureF| Date| Timestamp|MinTemp|MaxTemp|TemperatureF| Date|
// +------------+------------------+----------+-------+-------+------------+------------------+
// | 37.9|01/29/2008 5:53 AM|1201585980| -11.9| 39.2| 37.9|01/29/2008 5:53 AM|
// | -11.0|01/30/2008 4:53 AM|1201668780| -11.9| 1.9| 37.9|01/29/2008 5:53 AM|
// | -11.0|01/30/2008 5:53 AM|1201672380| -11.9| 1.9| 37.9|01/29/2008 5:53 AM|
// +------------+------------------+----------+-------+-------+------------+------------------+