У меня есть приложение Spark, которое выполняет пользовательские запросы правильной формы к набору данных.Каждый из них работает только с подмножеством всего набора данных, называемого «группами», которые на самом деле являются просто фильтрами в наборе данных и могут быть определены программистом.
type Group = DataFrame => DataFrame
val groupA = _.filter($"column1" > 0)
val groupB = _.filter($"column2" > 0 && $"column3" === 0)
val constraint1 = constraint(groupA, _.count == 0)
val constraint2 = constraint(groupA, _.dropDuplicates($"column3").count == 1)
// and so on
val constraint3 = constraint(groupB, _.count == 0)
...
framework.add(constraint1, constraint2, constraint3)
framework.execute()
Для каждого будет много ограниченийгруппа, поэтому, чтобы ускорить ее, я хочу собрать ограничения по их группам, кэшировать группу и запускать их ограничения друг за другом (или параллельно).
Итак, чтобы определить, принадлежат ли два ограничениядля них же группы Мне нужен какой-то способ сравнить наборы данных на равенство .
Моя идея состояла в том, чтобы сравнить их, используя semanticHash
логических плановНаборы данных, однако есть несколько логических планов, связанных с одним набором данных, и мне интересно, какой выбрать.
Каков наилучший способ сделать это?