使用循环创建 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?

用于 Cassandra 的 Spark2 会话,sql 查询

在 R 中使用 RODBC 创建循环 SQL QUERY