Я хочу рассчитать вес доказательств для столбца объектов в зависимости от двоичного целевого столбца, есть ли способ эффективно сделать это в Spark?
На данный момент Spark все еще не имеет встроенныхAPI для расчета WoE.
Я построил с использованием нескольких запросов Spark-SQL, которые выглядят следующим образом (здесь элемент представляет собой один столбец за раз внутри цикла for) -
new_df = spark.sql('Select `' + item + '`, `' + target_col + '`, count(*) as Counts from a group by `'
+ item + '`, `' + target_col + '` order by `' + item + '`, `' + target_col + '`')
new_df.show(2)
new_df.show()
new_df.registerTempTable('b')
# exit(0)
new_df2 = spark.sql('Select `' + item + '`, ' +
'case when `' + target_col + '` == 0 then Counts else 0 end as Count_0, ' +
'case when `' + target_col + '` == 1 then Counts else 0 end as Count_1 ' +
'from b')
spark.catalog.dropTempView('b')
# new_df2.show()
new_df2.registerTempTable('c')
# exit(0)
new_df3 = spark.sql('SELECT `' + item + '`, SUM(Count_0) AS Count_0, ' +
'SUM(Count_1) AS Count_1 FROM c GROUP BY `' + item + '`')
spark.catalog.dropTempView('c')
# new_df3.show()
# exit(0)
new_df3.registerTempTable('d')
# SQL DF Experiment
new_df4 = spark.sql(
'Select `' + item + '` as bucketed_col_of_source, Count_0/(select sum(d.Count_0) as sum from d) as Prop_0, ' +
'Count_1/(select sum(d.Count_1) as sum from d) as Prop_1 from d')
spark.catalog.dropTempView('d')
# new_df4.show()
# exit(0)
new_df4.registerTempTable('e')
new_df5 = spark.sql(
'Select *, case when log(e.Prop_0/e.Prop_1) IS NULL then 0 else log(e.Prop_0/e.Prop_1) end as WoE from e')
spark.catalog.dropTempView('e')
# print('Problem starts here: ')
# new_df5.show()
new_df5.registerTempTable('WoE_table')
joined_Train_DF = spark.sql('Select bucketed.*, WoE_table.WoE as `' + item +
'_WoE` from a bucketed inner join WoE_table on bucketed.`' + item +
'` = WoE_table.bucketed_col_of_source')
Это работает, как и ожидалось, но не очень эффективно.Для набора данных, содержащего около 50 000 точек данных / строк, происходит сбой при превышении кучи Java и ошибке заголовка GC.
Кто-нибудь может помочь?WoE является распространенной проблемой, когда речь идет о проектировании объектов в наборе данных.