Spark - вычислить статистику для столбцов массива (ArrayType) - PullRequest
1 голос
/ 27 января 2020

В настоящее время я работаю с Spark 2.4.3 и должен выполнить несколько объединений, например:

val res = df1.join(df2, Seq("x")).join(df3, Seq("y")).join(df4, Seq("z"))

, где каждый из задействованных DF создается из таблицы Hive. который содержит столбцы ArrayType. Например:

val df1 = spark.sql("SELECT x FROM TableWithArrayCols LATERAL VIEW EXPLODE(xArray) explodedX as x")

Как вы можете видеть, для создания DF требуется столбец (столбцы) TableWithArrayCols .

Я бы хотел, чтобы CBO запустил оптимизацию для переупорядочения соединений. Однако, насколько я понял, это не может произойти из-за отсутствия статистики для столбцов массива. Действительно, если я вычислю:

analyze table TableWithArrayCols compute statistics for columns xArray

, я получу следующее исключение:

org.apache.spark.sql.AnalysisException: Column xArray in table `myDB`.`TableWithArrayCols` is of type
ArrayType(StringType,true), and Spark does not support statistics collection on this column type.;

Мои вопросы:

1) Можно ли вручную добавить статистику c значения (например, min, max, num_nulls, different_count) для соответствующих метаданных? Если да, то как? Если нет, есть ли альтернативное решение?

2) В результате ручного добавления статистики автоматически запускается оптимизация из CBO?

...