黑名单过滤疑问

来源:8-5 -实战之黑名单过滤

慕圣8049820

2018-09-18

黑名单:
(zs,true)
(ls,true)
日志格式:
20180808,zs
20180808,ls
20180808,ww
通过transform算子,使用leftOuterJoin联表:
val clicklog1 = lines.map(x => (x.split(",")(1),x)).transform(rdd => {rdd.leftOuterJoin(blacksRDD)})
clicklog1.print()
运行后的输出结果
(zs,(20180808,zs,Some(true)))
(ls,(20180808,ls,Some(true)))
(ww,(20180808,ww,None))
使用filter进行过滤:
filter(x => x._2._2.getOrElse(false) != true)
疑问:
第一个_2代表的是?
我的理解:通过leftOuterJoin后,输出的是一个2元组,_2是代表从左向右第2个值,还是代表从左向右下标为2的元素;
第二个_2代表的是?
我的理解:假定第一个_2是从左向右的第2个值,那取出的结果是(20180808,ls,Some(true)),是一个3元组;那么第2个_2取出的结果应该为ls,并不是true或者false呀
求老师解惑~

写回答

1回答

Michael_PK

2018-09-18

_1或者_2 是scala里面的数据结构tuple。

clicklog1的结果的数据结构应该是(String, (String, Option[Boolean])),而不是你描述的那个。


最简单的方式clicklog1.filter(x=>x) 就这么写,你鼠标放到x上就能看到它完整的数据结构了




0
2
Michael_PK
回复
慕圣8049820
那就是打印的不太对,你直接一个debug进去就知道了
2018-09-18
共2条回复

Spark Streaming实时流处理项目实战

Flume+Kafka+Spark Streaming 构建通用实时流处理平台

1404 学习 · 571 问题

查看课程