使用spark 布隆过滤器的一个坑

object SparkAutoBloomFilterDemo {
	def main(args: Array[String]): Unit = {
		val spark = SparkSession.builder().enableHiveSupport().config(sparkConf).getOrCreate()
		import spark.implicits._
		//注意!id_不能为数字,否则无效!!!!!
//		val df = Seq(
//			("dsad11", "First Value3"),
//			("dsad12", "Second Value4")
//		).toDF("id_", "name")
//		val df2 = Seq(
//			("dsad11", "First Value31"),
//			("dsad12", "Second Value41"),
//			("dsad121", "Second Value4"),
//			("dsa3d11", "Second Value4")
//		).toDF("id_", "name")
		val df:DataFrame = getGenerDataframe(3,spark)
		val df2:DataFrame = df
		println("=====df")
		df.show

		println("=====df2")
		df2.show


		val bf = df.stat.bloomFilter("id_",df.count().toInt,0.01)
		//val bf = df.stat.bloomFilter("id",0,0.01)//如果是o的话会报错Expected insertions must be positive
//		val rightNum = rdd.map(x=>(x.toInt,bf.mightContainString(x)))
		println("=====dfmight")
		df2.where(!might_contain(bf)($"id_")).show
	}

	def might_contain(f: org.apache.spark.util.sketch.BloomFilter) = udf((x: String) =>
		if(x != null) f.mightContain(x) else false)
}

要记住布隆过滤器去重的那一列不能是数字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值