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)
請問我想篩選出三元素都不為空的三元組怎么寫啊,我這樣寫達不到目的。求大嬸幫忙
uj5u.com熱心網友回復:
filter 篩選適合 key-value這樣的rdd你可以 這樣
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)
uj5u.com熱心網友回復:
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)可以這樣試試
uj5u.com熱心網友回復:
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)
uj5u.com熱心網友回復:
建議借助第三方的工具類,這里推薦糊涂工具類: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)
uj5u.com熱心網友回復:
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)
uj5u.com熱心網友回復:
最近在忙啥哩uj5u.com熱心網友回復:
這個可以uj5u.com熱心網友回復:
第二行: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,所有資料都是會保留的。


uj5u.com熱心網友回復:
真相了
uj5u.com熱心網友回復:
filter(t => t._1!=null&&t._2!=null &&t._3!=null).take(10)你原先的邏輯錯誤了,這個可行
uj5u.com熱心網友回復:
在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))
}
uj5u.com熱心網友回復:
結果:(a,a,a)
(b,b,b)
(d,d,d)
有空的已去掉.
uj5u.com熱心網友回復:
見上面, 不是這樣用的, 你這個是java的寫法(容易混)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/32409.html
標籤:Spark
上一篇:cloudera manager 不能選擇主機,請問這是為什么
下一篇:AWS
