#python #apache-spark #pyspark #apache-spark-sql
#python #apache-spark #pyspark #apache-spark-sql
Вопрос:
У меня df1
есть фрейм данных, в котором есть четыре столбца:
key, lower_limit_A1, upper_limit_A1, lower_limit_A2, upper_limit_A2
1, 10, 20, 90, 100
2, 10, 20, 100, 110
3, 20, 30, 110, 120
4, 20, 30, 120, 130
5, 30, 40, 130, 140
6, 30, 40, 140, 150
У меня есть другой df2
фрейм данных, в котором A1
есть фактические значения
key_value, A1, A2
K1, 15, 105
K2, 35, 145
K3, 25, 115
Я пытаюсь связать ключи со значением ключа на основе определенного верхнего предела и нижнего предела для комбинации переменных A1 и A2 :
key_value, key
K1, 2
K2, 6
K3, 3
Пока я не уверен, как поступить с этим, но пытался сделать с помощью antijoin :
df1.join(
df2,
[df1.lower_limit_A1 <= df2.A1, df1.upper_limit_A1 >= df2.wind_speed],
how='left_anti'
)
Помощь приветствуется.
Ответ №1:
Здесь должно быть уместно внутреннее соединение. Вы можете указать условия, при которых значения A1 и A2 будут находиться между пределами.
results = df2.join(
df1,
df2.A1.between(df1.lower_limit_A1, df1.upper_limit_A1) amp;
df2.A2.between(df1.lower_limit_A2, df1.upper_limit_A2)
).select('key_value', 'key')