如何将一列与具有宽表的 SQL 查询中每隔一列进行比较



我正在尝试在 AWS Athena 中实现一个查询,其中我计算所选列与矩阵中所有其他列的 Pearson 相关系数,并返回排序列表。

数据作为 CSV 文件存储在 S3 中,如下所示:

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

但是,这似乎很乏味,并且很快就会达到查询大小限制。有没有更好的方法可以不牺牲(或提高(性能?这可以很容易地并行化,因为每个单独的相关系数都可以独立计算。

我知道

这不是您可能正在寻找的答案,但这似乎不是应该通过Athena/SQL/Presto完成的事情。 需要数千个自定义列是一个很大的危险信号。

这听起来更像是Spark Job的作业,可以通过ETL Job在AWS Glue中运行。

由于您的数据已经在 Athena 中,因此它应该已经在 Glue 中编目,您可以使用 Spark 中的 GlueContext 直接从该数据源加载数据框。

Spark 作业可以在 Python(通过 pyspark(或 Scala 中完成。 通过代码循环创建这些系数列,然后将它们写到另一个文件不应该是一个非常复杂的脚本。

假设您不熟悉其中的大部分内容,最好通过此示例/教程:https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-legislators.html

相关内容

  • 没有找到相关文章

最新更新