val result1 = rdd.map(x=> {
val data = x.split(",")
val date = data(0)
val vid = data(11)
val duration = data(16)
(date, vid, duration)
}).filter(t => t._1!=null).filter(t => t._2!=null).filter(t => t._3!=null).take(10)请问我想筛选出三元素都不为空的三元组怎么写啊,我这样写达不到目的。求大婶帮忙
val data = x.split(",")
val date = data(0)
val vid = data(11)
val duration = data(16)
(date, vid, duration)
}).filter(t => t._1!=null).filter(t => t._2!=null).filter(t => t._3!=null).take(10)请问我想筛选出三元素都不为空的三元组怎么写啊,我这样写达不到目的。求大婶帮忙
解决方案 »
- 华为的FuisonManager产品能否管理VMware的虚拟化环境?
- 在openstack虚拟机上安装oracle后,外部主机不能访问1521
- OpenStack在云计算领域有何竞争力
- 谁能提供openstack上bosh自动化部署cloud foundry
- AWS 是什么?
- 求高手帮忙..分公司用mstsc连接不上远程服务器 ...
- Spark无法访问hive创建的表,反之也是
- 华为云计算问题
- 如何确保在同一REGION下的单一ELB不出现单点故障?
- 求助大神!搞了好几天 docker会自动把容器暂停的问题!!
- 关于spark mllib中 FPM算法的性能问题
- Spark.mllib中ALS predictAll返回结果缺失
你可以 这样val result1 = rdd.map(x=> {
val data = x.split(",")
val date = data(0)
val vid = data(11)
val duration = data(16)
val key = date
val value = vid+","+duration
(key,value)
}).filter(t => t._1!=null).filter(t => (t._2.split(","))(0)!=null).filter(t => (t._2.split(","))(1)!=null).take(10)
val data = x.split(",")
val date = data(0)
val vid = data(11)
val duration = data(16)
(date, vid, duration)
}).filter(rdd=>{
if(rdd._1!=null && rdd._2!=null && rdd._3!=null)
{
true
}else
{
false
}
}).take(10)
可以这样试试
val data = x.split(",")
val date = data(0)
val vid = data(11)
val duration = data(16)
(date, vid, duration)
}).filter(t => t._1!=null&&t._2!=null &&t._3!=null).take(10)
val result1 = rdd.map(x=> {
val data = x.split(",")
val date = data(0)
val vid = data(11)
val duration = data(16)
(date, vid, duration)
}).filter(tp => StrUtil.isNotBlack(tp._1) && StrUtil.isNotBlack(tp._2) && StrUtil.isNotBlack(tp._3)).take(10)
val data = x.split(",")
val date = data(0)
val vid = data(11)
val duration = data(16)
(date, vid, duration)
}).filter(t => t._1!=null&&t._2!=null&&t._3!=null)
说明 data 类型 Array[String]
通过split得到的data里面是不可能包含null的,最多只能是 "" 空字符串
所以,想通过 xxx != null 来过滤是无论如何都不可能过滤任何一条数据的,哪怕是空字符串,也是 != null 的.filter(t => t._1!=null).filter(t => t._2!=null).filter(t => t._3!=null)
if(rdd._1!=null && rdd._2!=null && rdd._3!=null)
这两种方式无论怎么改,表达式结果均为true,所有数据都是会保留的。
你原先的逻辑错误了,这个可行
什么也不说, 看代码 : def test23(): Unit ={
val cfg =new Configuration()
val conf = new SparkConf()
.setAppName("spack 本地测试")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.setMaster("local") // 本地调试
val sc = new SparkContext(conf)
//接你的代码, 判断有没有值用 nonEmpty, 或者 isEmpty
val rdd = sc.makeRDD(Array( "a,a,a", "b,b,b", "c,,c", "d,d,d" ), 3)
val result1 = rdd.map(x => {
val data = x.split(",")
val date = data(0)
val vid = data(1)
val duration = data(2)
(date, vid, duration)
} )
.filter(t => t._1.nonEmpty && t._2.nonEmpty && t._3.nonEmpty)
.take(10)
.foreach(row => println(row))
}
(a,a,a)
(b,b,b)
(d,d,d)有空的已去掉.
见上面, 不是这样用的, 你这个是java的写法(容易混)