Я работаю в университете, и пытаюсь заставить 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 для этой работы.