искра: как соление работает при работе с искаженными данными - PullRequest
0 голосов
/ 26 сентября 2019

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

1 Ответ

1 голос
/ 26 сентября 2019

Мой вопрос: когда к ключу добавляются случайные числа, разве это не разрушает группу?

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

Например,

import org.apache.spark.sql.functions._

df.withColumn("salt", (rand * n).cast(IntegerType))
  .groupBy("salt", groupByFields)
  .agg(aggFields)
  .groupBy(groupByFields)
  .agg(aggFields)
...