spark filter 过滤

weixin_36772742 2017-12-19 05:05:47
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)

请问我想筛选出三元素都不为空的三元组怎么写啊,我这样写达不到目的。求大婶帮忙
...全文
3016 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小中. 2021-07-14
  • 打赏
  • 举报
回复

val result1 = rdd.map(x=> { val data = x.split(",") val date = data(0) val vid = data(11) val duration = data(16) (date, vid, duration) }).toDF().na.drop().take(10) , 你是要判断三元组任何一个都不为null
toDF().na.drop()

guishuanglin 2019-08-01
  • 打赏
  • 举报
回复
引用 楼主 weixin_36772742 的回复:
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) 请问我想筛选出三元素都不为空的三元组怎么写啊,我这样写达不到目的。求大婶帮忙
见上面, 不是这样用的, 你这个是java的写法(容易混)
guishuanglin 2019-08-01
  • 打赏
  • 举报
回复
结果: (a,a,a) (b,b,b) (d,d,d) 有空的已去掉.
guishuanglin 2019-08-01
  • 打赏
  • 举报
回复
在spark里不要和null, 特别是 split(",") 出来的值是没有null的, 什么也不说, 看代码 :

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))
  }
「已注销」 2019-07-11
  • 打赏
  • 举报
回复
引用 9 楼 西門吹牛__Linux 的回复:
第二行:val data = x.split(",")
说明 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,所有数据都是会保留的。


真相了
  • 打赏
  • 举报
回复
filter(t => t._1!=null&&t._2!=null &&t._3!=null).take(10)
你原先的逻辑错误了,这个可行
  • 打赏
  • 举报
回复
第二行:val data = x.split(",") 说明 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,所有数据都是会保留的。
mamba10 2019-06-19
  • 打赏
  • 举报
回复
引用 2 楼 张层平 的回复:
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(rdd=>{
if(rdd._1!=null && rdd._2!=null && rdd._3!=null)
{
true
}else
{
false
}

}).take(10)

可以这样试试
这个可以
Love_1_Me 2019-06-15
  • 打赏
  • 举报
回复
最近在忙啥哩
嘻哈吼嘿呵 2019-05-21
  • 打赏
  • 举报
回复
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&&t._2!=null&&t._3!=null)
机智的小狐狸 2019-05-20
  • 打赏
  • 举报
回复
建议借助第三方的工具类,这里推荐糊涂工具类:https://hutool.cn/docs/#/ 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)
嘻哈吼嘿呵 2018-02-08
  • 打赏
  • 举报
回复
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&&t._2!=null &&t._3!=null).take(10)
张某码 2018-01-16
  • 打赏
  • 举报
回复
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(rdd=>{
      if(rdd._1!=null && rdd._2!=null && rdd._3!=null)
        {
          true
        }else
      {
        false
      }
      
    }).take(10)
可以这样试试

1,258

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧