我有我的业务数据单SparkDataframe。我想对这个数据集执行几十个sql查询。每个sql查询都类似于数据健康检查。
我的excel是这样的:
真正的excel文件可能包含几十个(甚至几百个)sql查询。
每个查询都以这种形式返回一个结果。因此,每个查询都返回前一行,这些行填充了“query description”列中描述的条件。所以所有的结果都有相同的模式。
这就是理想的结果:
目前唯一的想法是:
读取该文件,并通过df.collect()函数从“query”列收集sql查询,然后遍历查询列表并执行
result of_query = spark.sql(current_query)
每走一步
ever query将返回一个带有查询结果的1行Dataframe。我们将这1行Dataframe收集到列表中,因此最后我们将有一个Dataframe列表,每个Dataframe都将包含一行,其中包含特定查询的百分比结果。
将输出列表中的所有查询结果合并到单个Dataframe中。
显然这种解决方案看起来很糟糕。
与查询的执行时间相比,查询列表中的迭代速度非常快。所以看起来在1-2秒内我们会提交几十个(甚至几百个!)我们的集群中有大量的spark作业,这会导致资源分配的问题。
我将感谢任何想法如何使这样一个任务在一个更好的方式。
这是我们无法改变的条件:
python作为一种编程语言
spark作为一种执行技术(因此我们不能使用hive或impala)
我们可以这样做:
如有必要,可以更改几乎所有的spark配置(驱动程序设置、execurots设置、动态分配、执行器计数、内存开销、广播阈值等)
导入附加库(例如Pandas)
理想情况下,解决方案应该能够处理失败的查询(例如,在语法不正确的情况下),但这不是关键条件。
暂无答案!
目前还没有任何答案,快来回答吧!