首页 > 解决方案 > 如何在 PySpark 中运行 .sql 文件

问题描述

我能够使用 PySpark 运行单个 SQL 查询。例如

spark = SparkSession.builder.appNmae("___").getOrCreate()
df = spark.sql("select * from ...")

但是我有一个 .sql 文件,里面有很多我想运行的查询。我必须一次执行一个,还是有一种简单的方法来运行所有这些?

示例:table1 中 3 行 3 列,table2 中相同

.sql 文件

select * from table1;

select * from table2;

输出df:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
3  a  b  c
4  d  e  f
5  g  h  i

或者

df1

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

和 df2

   A  B  C
0  a  b  c
1  d  e  f
2  g  h  i

标签: sqlapache-sparkpysparkapache-spark-sql

解决方案


如果要将所有查询结果合并到数据框列表中(假设每一行都是一个查询)

with open('/path/to/file.sql', 'r') as f:
    query = f.readlines()

dfs = []
for line in query:
    dfs.append(spark.sql(line))

如果要组合所有数据框(假设它们都具有相同的架构)

from functools import reduce

df = reduce(lambda x, y: x.union(y), dfs)

推荐阅读