我正在尝试在AWS Athena中实现查询,在该查询中,我将所选列的相对于矩阵中其他所有列的Pearson相关系数计算出来,并返回一个排序列表。
数据作为CSV文件存储在S3中,如下所示:
E
我希望能够计算corr(col_1,col_2),corr(col_1,col_3),... cor(col_1,col_15000)并按相关系数对结果进行排序(查找相关度最高/最少的列) 。
编写此查询的最有效方法是什么?我希望此查询尽可能地高效。显而易见的答案是生成这样的查询:
col_1 col_2 col_3 col_4 .... col_15000
0 124 56 200 .... 4
0 0 44 0 .... 0
....
但是,这似乎很乏味,并且很快达到了查询大小限制。有没有更好的方法而不牺牲(或提高)性能?这可以很容易地并行化,因为每个独立的相关系数都可以独立计算。
答案 0 :(得分:0)
我知道这不是您可能正在寻找的答案,但这似乎不应该通过Athena / SQL / Presto完成。需要数千个自定义列是一个很大的危险信号。
这听起来更像是Spark作业,可以通过AWS Glue在ETL Job中运行。
由于您的数据已经在Athena中,因此应该已经在Glue中对其进行了分类,因此您可以在Spark中使用GlueContext直接从该数据源加载数据帧。
Spark作业可以使用Python(通过pyspark)或Scala完成。通过代码循环创建这些系数列,然后将它们写到另一个文件中,应该不是很复杂的脚本。
假设您不熟悉其中的大部分内容,那么最好阅读以下示例/教程: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-legislators.html