【问题标题】:SparkSQL equivalent for SQL compiled statement with variables带变量的 SQL 编译语句的 SparkSQL 等效项
【发布时间】:2020-08-11 13:42:39
【问题描述】:

我需要高效地执行 SparkSQL 语句。例如。一次编译,多次执行(使用不同的参数值)。

对于一个简单的 SQL 示例:

select * from my_table where year=:1

其中 :1 是一个绑定变量,因此该语句只编译一次,并执行 N 次(使用不同的值),我需要相同的 SparkSQL 等价物。

类似的东西:

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

不是我所期望的,因为不是真正的绑定变量,而只是一个特定的实例化句子。

【问题讨论】:

  • 为什么需要这个?为了表现?我想您会发现带有字符串插值的示例将为您提供快速而良好的服务。
  • 确实是在性能方面。如果您碰巧执行了此语句数千次,那么可以看看替代方法以避免每次都重新计算该语句。

标签: apache-spark apache-spark-sql


【解决方案1】:

根据您的数据存储位置、集群资源、表大小等...您可能考虑缓存整个表,这至少可以防止 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 的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2010-11-05
    • 2011-01-27
    • 2015-08-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多