使用循环创建 Spark SQL 查询
Posted
技术标签:
【中文标题】使用循环创建 Spark SQL 查询【英文标题】:Using loop to create spark SQL queries 【发布时间】:2021-06-26 18:54:02 【问题描述】:我正在尝试为我收集为列表的不同表创建一些 spark SQL 查询。我想为 hive 数据库中存在的所有表创建 SQL 查询。hive 上下文已初始化以下是我的方法。
tables= spark.sql("select tables in survey_db")
# registering dataframe as temp view with 2 columns - tableName and db name
tables.createOrReplaceTempView("table_list")
# collecting my table names in a list
table_array= spark.sql("select collect_list(tableName) from table_list").collect()[0][0]
# array values(list)
table_array= [u'survey',u'market',u'customer']
我想为存储在 table_array 中的表名创建 spark SQL 查询。例如:
for i in table_array:
spark.sql("select * from survey_db.'i'")
我不能使用 shell 脚本,因为我必须为此编写一个 pyspark 脚本。如果可以使用 loop/map 创建 spark.sql 查询,请提供建议。谢谢大家。
【问题讨论】:
f-string 就够了 【参考方案1】:同样可以实现如下:
sql_list = [f"select * from survey_db.table" for table in table_array]
for sql in sql_list:
df = spark.sql(sql)
df.show()
【讨论】:
我会建议一个字符串列表,然后使用spark.table(table_name)
以上是关于使用循环创建 Spark SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark (v.1.5.2) 中从 SQL 查询创建表
Spark SQL(通过 HiveContext 进行 Hive 查询)总是创建 31 个分区
在脚本中迭代/循环 Spark parquet 文件会导致内存错误/堆积(使用 Spark SQL 查询)
如何从 Snowflake SQL 查询创建 PySpark pandas-on-Spark DataFrame?