azure 将代码转换为循环而不是硬代码

svmlkihl  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(97)
policies_coeff = (test_policies_rl
            .join(rates_table,(
                  (test_policies_rl.version==rates_table.version) &
                  (test_policies_rl.sub_class==rates_table.cover) &
                  (test_policies_rl.rf_1==rates_table.RF) &
                  (test_policies_rl.rl_1==rates_table.rating_factor_1)
            ),"left")
            .withColumnRenamed("rating_factor_amount","rating_factor_amount_1")
            .withColumnRenamed("rating_factor_coefficient","rating_factor_coefficient_1")
            .withColumnRenamed("rating_factor_level", "rating_factor_level_1")
            .withColumnRenamed("rating_factor_rate", "rating_factor_rate_1")
            .drop(rates_table.version, rates_table.cover, rates_table.RF, rates_table.rating_factor_1, rates_table.rating_factor_2)
)

字符串
我想把这段代码写成一个循环,你在这段代码中看到的所有地方都是1,它可以是2,3,4,5,6,7......等,这取决于表中的数字列。
尝试使用F字符串

58wvjzkj

58wvjzkj1#

我在SparkSql中尝试了以下方法作为示例

test_policies_rl_data = [
    (1, 'A', 0.5, 0.8),
    (2, 'B', 0.6, 0.9),
    (3, 'C', 0.7, 1.0)
]
rates_table_data = [
    (1, 'A', 0.5, 0.8, 1.1, 10, 0.5, 1, 100),
    (2, 'B', 0.6, 0.9, 1.2, 20, 0.6, 2, 200),
    (3, 'C', 0.7, 1.0, 1.3, 30, 0.7, 3, 300)
]
test_policies_rl = spark.createDataFrame(test_policies_rl_data, ['version', 'sub_class', 'rf_1', 'rl_1'])
rates_table = spark.createDataFrame(rates_table_data, ['version', 'cover', 'RF', 'rating_factor_1', 'rating_factor_2',
                                                       'rating_factor_amount', 'rating_factor_coefficient', 'rating_factor_level', 'rating_factor_rate'])
test_policies_rl.createOrReplaceTempView("test_policies_rl")
rates_table.createOrReplaceTempView("rates_table")
num_columns = 5
base_query = """
SELECT 
    t.*,
    r.rating_factor_amount AS rating_factor_amount_{},
    r.rating_factor_coefficient AS rating_factor_coefficient_{},
    r.rating_factor_level AS rating_factor_level_{},
    r.rating_factor_rate AS rating_factor_rate_{}
FROM test_policies_rl t
LEFT JOIN rates_table r
ON t.version = r.version
AND t.sub_class = r.cover
AND t.rf_1 = r.RF
AND t.rl_1 = r.rating_factor_1
"""
for i in range(1, num_columns + 1):
    query = base_query.format(i, i, i, i)
    policies_coeff = spark.sql(query)
    policies_coeff.show()

字符串


的数据



在上面的代码中,我使用createOrReplaceTempView方法创建了临时视图test_policies_rl和rates_table。变量num_columns被初始化,表示后续SQL查询生成的列总数。SQL查询模板base_query被定义,其在test_policies_rl和rates_rates上执行左连接。基于指定条件的表。创建循环以生成和执行针对不同数字的SQL查询for循环用于使用base_query动态生成和执行SQL查询。循环从1到num_columns。在循环中,base_query使用循环变量i进行格式化,以指定SQL查询中的相关列号。格式化后的查询使用spark.sql(query)执行,结果DataFrame使用show()方法显示。

相关问题