Я использую искру (версия 2.3) с фильтром Блума эскиза
val tbl = spark.table(table)
.where(whereCond)
.select("request_id").cache() // request_id is tring type
val numItems = tbl.count
val errRate = 0.01
val bfDF = tbl.stat.bloomFilter("request_id", numItems, errRate)
val bf = spark.sparkContext.broadcast(bfDF)
myOtherDF.map{ data =>
....
val exists = bf.value.mightContainString(data.req_id)
}
Число строк, которые будут вставлены в BF, составляет ~ 350 000 000
. получение слишком большого количества ложных срабатываний ~ 90% - так что оно на самом деле не работает должным образом. Производительность этого шага очень и очень медленная - ~ 1,5 минуты (только создание BloomFilter)
Известно ли это быть неправым с большими числами, и почему это так медленно?