Я пытаюсь сопоставить два кадра данных на основе окна переменной даты.Я не просто пытаюсь получить точное совпадение, которого добивается мой код, но чтобы найти всех вероятных кандидатов в окне с переменным днем.
Мне удалось получить точные совпадения по датам с моим кодом.
Но я хочу выяснить, можно ли сопоставить записи, поскольку они могут быть на несколько дней свободны с обеих сторон, но все же достаточно разумны, чтобы присоединиться к ним.
Я пыталсяищу что-то похожее на Python pd.to_timedelta('1 day')
в искре, чтобы добавить к фильтру, но увы, не повезло.
Вот мой текущий код, который соответствует кадру данных в столбце ID , а затемзапускает фильтр, чтобы убедиться, что from_date во втором кадре данных находится между start_date и end_date первого кадра данных.
Мне нужно не точное совпадение дат, а возможность сопоставления записей, если они попадают между днем или двумя (с обеих сторон) фактических дат.
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().getOrCreate()
val df1 = spark.read.option("header","true")
.option("inferSchema","true").csv("../data/df1.csv")
val df2 = spark.read.option("header","true")
.option("inferSchema","true")
.csv("../data/df2.csv")
val df = df2.join(df1,
(df1("ID") === df2("ID")) &&
(df2("from_date") >= df1("start_date")) &&
(df2("from_date") <= df1("end_date")),"left")
.select(df1("ID"), df1("start_date"), df1("end_date"),
$"from_date", $"to_date")
df.coalesce(1).write.format("com.databricks.spark.csv")
.option("header", "true").save("../mydata.csv")
По сути, я хочу иметь возможность редактировать это окно даты, чтобы увеличить или уменьшить данные, действительно совпадающие.
Буду очень признателен за ваш вклад.Я новичок в Spark / Scala, но должен сказать, что я люблю это до сих пор ... так намного быстрее (и чище), чем Python!
ура