У меня есть фрейм данных, который выглядит следующим образом
>>> df_w_cluster.select('high_income', 'aml_cluster_id').show(10)
+-----------+--------------+
|high_income|aml_cluster_id|
+-----------+--------------+
| 0| 0|
| 0| 0|
| 0| 1|
| 0| 1|
| 0| 0|
| 0| 0|
| 0| 1|
| 1| 1|
| 1| 0|
| 1| 0|
+-----------+--------------+
only showing top 10 rows
Столбец high_income
является двоичным и содержит 0
или 1
.aml_cluster_id
содержит значения, начиная с 0
до 3
.Я хочу создать новый столбец, значения которого зависят от значений high_income
и aml_cluster_id
в этой конкретной строке.Я пытаюсь добиться этого с помощью SQL.
df_w_cluster.createTempView('event_rate_holder')
Чтобы выполнить это, я написал такой запрос -
q = """select * , case
when "aml_cluster_id" = 0 and "high_income" = 1 then "high_income_encoded" = 0.162 else
when "aml_cluster_id" = 0 and "high_income" = 0 then "high_income_encoded" = 0.337 else
when "aml_cluster_id" = 1 and "high_income" = 1 then "high_income_encoded" = 0.049 else
when "aml_cluster_id" = 1 and "high_income" = 0 then "high_income_encoded" = 0.402 else
when "aml_cluster_id" = 2 and "high_income" = 1 then "high_income_encoded" = 0.005 else
when "aml_cluster_id" = 2 and "high_income" = 0 then "high_income_encoded" = 0.0 else
when "aml_cluster_id" = 3 and "high_income" = 1 then "high_income_encoded" = 0.023 else
when "aml_cluster_id" = 3 and "high_income" = 0 then "high_income_encoded" = 0.022 else
from event_rate_holder"""
, когда я запускаю его в искре, используя
spark.sql(q)
Я получаю следующую ошибку
mismatched input 'aml_cluster_id' expecting <EOF>(line 1, pos 22)
Есть идеи, как это преодолеть?
РЕДАКТИРОВАТЬ :
Я отредактировал запроссогласно предложению в комментариях к следующему
q = """select * , case
when aml_cluster_id = 0 and high_income = 1 then high_income_encoded = 0.162 else
when aml_cluster_id = 0 and high_income = 0 then high_income_encoded = 0.337 else
when aml_cluster_id = 1 and high_income = 1 then high_income_encoded = 0.049 else
when aml_cluster_id = 1 and high_income = 0 then high_income_encoded = 0.402 else
when aml_cluster_id = 2 and high_income = 1 then high_income_encoded = 0.005 else
when aml_cluster_id = 2 and high_income = 0 then high_income_encoded = 0.0 else
when aml_cluster_id = 3 and high_income = 1 then high_income_encoded = 0.023 else
when aml_cluster_id = 3 and high_income = 0 then high_income_encoded = 0.022 end
from event_rate_holder"""
, но я все еще получаю ошибки
== SQL ==
select * , case
when aml_cluster_id = 0 and high_income = 1 then high_income_encoded = 0.162 else
-----^^^
, за которыми следует
pyspark.sql.utils.ParseException: "\nmismatched input 'aml_cluster_id' expecting <EOF>(line 2, pos 5)\n\n== SQL ==\nselect * ,