Как изменить компаратор Spark GroupBy / OrderBy для работы с зашифрованными данными - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю в университете, и пытаюсь заставить Spark SQL работать с зашифрованными данными (с помощью моих алгоритмов).Я реализовал некоторые функции, которые позволяют сравнивать два зашифрованных значения с точки зрения их равенства и порядка, и я использую функции UDF / UDAF для выполнения этих функций.

Например, если я хочу выполнить этот запрос:

SELECT count(SALARY) FROM table1 WHERE age > 20

, я конвертирую его в:

SELECT mycount_udf(SALARY) FROM table1 WHERE myfilter_udf(greater_udf(age,20))

, где mycount_udf, my_filter_udf и большее_udf - UDAF, иUDF реализован для работы с моими функциями над зашифрованными данными.

Однако я сталкиваюсь с проблемой, когда хочу выполнить запрос как ORDER BY / GROUP BY.Внутренние элементы этих операторов используют операции равенства и порядка для выполнения запроса.Однако, чтобы позволить правильно выполнять запросы к моим зашифрованным значениям, я должен изменить компараторы внутри ORDER BY / GROUP BY, чтобы использовать мои UDF-компараторы (равенства_удф, большее_удф и т. Д.).

Если я зашифрую:

x = 5 => encrypted_x = KSKFA92
y = 6 => encrypted_y = A9283NA

При 5 <6, great_udf (5,6) вернет False.Поэтому я должен использовать этот компаратор внутри ORDER BY (SORT) для правильного выполнения запроса, потому что Spark не знает, что значения зашифрованы, и когда он сравнивает encrypted_x с encrypted_y с использованием == или компаратором между Spark DataTypes, вызоветневерный результат. </p>

Есть ли способ сделать это без изменения исходного кода Spark GROUP BY / ORDER BY?Кажется, я не могу использовать UDF / UDAF.Я использую JAVA для этой работы.

...