Как сравнить столбец с любым другим столбцом в запросе SQL с широкой таблицей? - PullRequest
2 голосов
/ 11 июня 2019

Я пытаюсь реализовать запрос в AWS Athena, где я вычисляю коэффициент корреляции Пирсона выбранного столбца для каждого другого столбца в матрице и возвращаю отсортированный список.

Данные хранятся вS3 в виде CSV-файла и выглядит следующим образом:

col_1 col_2 col_3 col_4 .... col_15000
  0    124    56   200  ....   4
  0     0     44    0   ....   0
....

Я хочу иметь возможность вычислять corr (col_1, col_2), corr (col_1, col_3), ... cor (col_1, col_15000) иотсортировать результаты по коэффициентам корреляции (найти наиболее / наименее коррелированные столбцы).

Какой самый эффективный способ написать этот запрос?Я бы хотел, чтобы этот запрос был максимально быстрым.Очевидный ответ - создать запрос, подобный следующему:

SELECT
corr(col_1, col_2) AS cor_2,
corr(col_1, col_3) AS cor_3,
...

corr(col_1, col_15000) AS cor_15000

Однако это кажется утомительным, и ограничение размера запроса быстро достигается.Есть ли лучший способ, который не жертвует (или увеличивает) производительность?Это может быть легко распараллелено, поскольку каждый отдельный коэффициент корреляции может быть вычислен независимо.

1 Ответ

0 голосов
/ 11 июня 2019

Я знаю, что это не тот ответ, который вы, вероятно, ищете, но это не похоже на то, что должно быть сделано через Athena / SQL / Presto.Нужные тысячи пользовательских столбцов - это большой красный флаг.

Это больше похоже на работу для Spark Работы, которую можно запустить в AWS Glue через ETL Job .

Поскольку ваши данные уже находятся в Афине, они должны быть уже каталогизированы в Glue, и вы можете использовать GlueContext в искре для загрузки вашего фрейма данных непосредственно из этого источника данных.

Spark-задания можно выполнять на Python (через pyspark) или Scala.Создание этих столбцов коэффициентов с помощью цикла кода, а затем запись их в другой файл не должно быть очень сложным сценарием.

Предполагая, что вы не знакомы с большинством из этого, может быть полезно пройти этот пример /учебник: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-legislators.html

...