sparksql等价于带变量的sql编译语句

kfgdxczn  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(446)

我需要高效地执行sparksql语句。编译一次,执行多次(使用不同的参数值)。
对于一个简单的sql示例:

select * from my_table where year=:1

其中:1是绑定变量,因此该语句只编译一次,执行n次(使用不同的值),我需要相同的sparksql equivalent。
比如:

year = 2020
df_result = spark.sql("select * from my_table where year={0}".format(year))

不是我所期望的,因为它们不是真正的绑定变量,而是一个特定的示例化语句。

r7s23pms

r7s23pms1#

根据数据存储的位置、集群资源、表大小等。。。您可以考虑缓存整个表,这至少可以防止spark在每次执行查询时都必须读取磁盘/blob存储

catalog = sparkSession.catalog

if catalog.isCached("my_table")):
  df_my_table.cache()

df_result = df_my_table.filter("year='" + str(year) + "'")

根据您的体系结构,可能有很多方法可以做得更好,但我坚持使用100%基于spark的解决方案

相关问题