Skip to content

EBAD-1012 Add dv-hash-spark module#2

Open
stem-z wants to merge 2 commits into
EBAD-1012_add_dv-hash-corefrom
EBAD-1012_add_dv-hash-spark
Open

EBAD-1012 Add dv-hash-spark module#2
stem-z wants to merge 2 commits into
EBAD-1012_add_dv-hash-corefrom
EBAD-1012_add_dv-hash-spark

Conversation

@stem-z
Copy link
Copy Markdown
Contributor

@stem-z stem-z commented May 15, 2026

Описание изменений

Добавлен модуль dv-hash-spark, в котором реализованы:

  • регистрация Spark SQL UDF:
    • dv_normalize;
    • dv_normalize_null;
    • dv_hash;
  • DataFrame/Dataset API helpers:
    • dvNormalize / dv_normalize;
    • dvNormalizeNull / dv_normalize_null;
    • dvHash / dv_hash;

Как запустить тесты?

JAVA_HOME=/path/to/jdk11 mvn -pl dv-hash-spark -am test

Как собрать jar?

JAVA_HOME=/path/to/jdk11 mvn -pl dv-hash-spark -am package

Почему тесты и сборку dv-hash-spark нужно запускать под JDK 11?

Модуль dv-hash-spark рассчитан на Spark 3.3.2, поэтому для локальной сборки и тестов используется JDK 11 (с параметрами --release 8 и -target:jvm-1.8, прописанными в pom.xml).

Запуск под JDK 23 с параметром --release 8 не подходит: Spark 3.3.2 и Hadoop-зависимости, которые поднимаются в тестах, не совместимы с новыми JDK (ошибка при старте SparkSession: UnsupportedOperationException: getSubject is not supported).

Сборка и запуск тестов dv-hash-spark непосредственно под JDK 8 не выбраны, поскольку это усложнило бы
pom.xml.

Поэтому JDK 11 выбран как стабильный build/ test runtime для Spark 3.3.2. При этом итоговый артефакт остаётся Java 8-compatible.

@stem-z stem-z requested a review from a team May 15, 2026 09:01
case v: JavaInteger => DvHash.normalize(v)
case v: JavaLong => DvHash.normalize(v)
case v: JavaBigInteger => DvHash.normalize(v)
case v: SparkDecimal => DvHash.normalize(v.toJavaBigDecimal)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SparkDecimal точно перехватит float и double?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, SparkDecimal не перехватывает float и double.
Float и double не входят в контрактные типы из-за проблем с точностью (например, 0.1 + 0.2 для double даёт 0.30000000000000004), поэтому они намеренно попадают в unsupported type. Это отдельно покрыто тестом rejectsUnsupportedContractTypes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants