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, null, 10, 0.5, 1, 100),
(2, 'B', 0.6, 0.9, null, 20, 0.6, 2, 200),
(3, 'C', 0.7, 1.0, null, 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 = 3
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()
字符串
如果我在test_policies_rl_data中有多个条件要加入eahc评级因子,该怎么办?
首先,rates_table是一个表的表,其中我可以使用以下命令访问每个评级因子rates:
rates_table价格表
所以当访问这些表时,
只有rating_factor_1列在费率表中被填充.但是,如果rating_factor_2列也被填充,我将不得不匹配它与test_policies_rl_data中的列之一,以获得正确的rating_factor_amount,系数和费率?
范例:
test_policies_rl_data = [
(1, 'A','private', 0.5, 0.8),
(2, 'B', 'business',0.6, 0.9),
(3, 'C', 'private',0.7, 1.0)
]
rates_table_data = [
(1, 'A', 0.5, 0.8, 'private', 10, 0.5, 1, 100),
(2, 'B', 0.6, 0.9, 'business', 20, 0.6, 2, 200),
(3, 'C', 0.7, 1.0, 'private', 30, 0.7, 3, 300),
(3, 'C', 0.7, 1.0, 'business', 30, 0.7, 3, 300)
]
test_policies_rl = spark.createDataFrame(test_policies_rl_data, ['version', 'sub_class', 'use,'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")
型
所以在这种情况下,
rates_table中的rating_factor_2也应该匹配test_policies中的“use”列。我不确定如何使代码识别将要发生的2因子连接?因为有时它可能是1因子连接,有时它可能是2。
1条答案
按热度按时间nwsw7zdq1#
我尝试了下面的例子。
字符串
join
添加了一个额外的条件,特别是针对use和rating_factor_2
列。此条件检查这些列中的值是否匹配,或者如果
rating_factor_2
是null
,则检查use列是否为“*business business”。