Replace Temp with Query( 以查询取代临时变量)

一 次重构方式是用说明

  临时变量只被赋值一次,校验是否只被赋值一次方式,将临时变量修饰符改成final类型,编译器无报错则证明只被赋值一次。

  临时变量提到单独查询函数中,保证其他引用方法,不用写重复代码。

二 使用实例 

//包含两个临时变量
double getPrice() {
        
        int basePrice = quantity * itemPrice;
        double discountFactor;
        if (basePrice > 10000) {
            discountFactor = 0.95;
        } else {
            discountFactor = 0.98;
        }

        return basePrice * discountFactor;
    }

 以查询代替临时变量  

double getPrice() {
        return basePrice() * discountFactor();
    }

    private double discountFactor() {

        if (basePrice() > 10000) {
            return  0.95;
        } else {
            return  0.98;
        }
    }

    private int basePrice() {
        return quantity * itemPrice;
    }

三 备注

 使用次方式,临时变量只能被赋值一次,要保证提炼出来的函数无副作用。

临时变量报错循环累加结果,也可以抽取成查询函数,一个循环中存在多个临时变量累加,可以抽取成多个方法,此方法可能引入性能问题,需要综合考虑后选择。

### 如何在 Spark SQL 中设置和使用变量 在 Python 编写的 Spark 应用程序中,可以通过多种方式向 Spark SQL 查询传递参数。一种常见的方式是利用 `DataFrame` API 和字符串插值来动态构建查询语句。 对于简单的变量替换操作,可以采用如下方法: ```python from pyspark.sql import SparkSession # 创建 SparkSession 实例 spark = SparkSession.builder \ .appName("VariableExample") \ .master("local[*]") \ .getOrCreate() # 定义要使用的变量 my_variable_value = "exampleValue" # 使用 f-string 或 format 方法将变量嵌入到 SQL 字符串内 query_with_var = f""" SELECT * FROM my_table WHERE column_name = '{my_variable_value}' """ df_result = spark.sql(query_with_var) df_result.show() ``` 另一种更安全的方法是通过绑定参数的方式来防止 SQL 注入攻击: ```python from pyspark.sql import Row data = [("John",), ("Jane",)] rdd = spark.sparkContext.parallelize(data) peopleDF = rdd.map(lambda x: Row(name=x[0])).toDF() name_to_find = "John" filtered_df = peopleDF.createOrReplaceTempView("temp_people") safe_query = """ SELECT name FROM temp_people WHERE name LIKE ? """ result_df = spark.sql(safe_query.replace('?', "'" + name_to_find + "'")) result_df.show() ``` 值得注意的是,在某些情况下直接使用 `OFFSET` 子句可能会遇到不兼容的问题[^3];因此如果涉及到分页逻辑,则需考虑其他替代方案如基于窗口函数实现相同效果。 为了提高性能并减少网络传输开销,当需要频繁访问不变的数据集时可引入广播变量机制[^4]。这允许开发者预先加载较小规模却经常被引用的数据结构至各个工作节点上供后续任务调用而无需重复发送这些数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值