collect()
把 dataframe格式转化为 Array[Row]格式
以movieLens数据前7行位例
userdata.show()
部分数据展示:
+------+-------+------+----------+
|userId|movieId|rating| timestamp|
+------+-------+------+----------+
| 1| 2| 3.5|1112486027|
| 1| 29| 3.5|1112484676|
| 1| 32| 3.5|1112484819|
| 1| 47| 3.5|1112484727|
| 1| 50| 3.5|1112484580|
| 1| 112| 3.5|1094785740|
| 1| 151| 4.0|1094785734|
var tt: Array[Row] = userdata.collect()
println(tt.toList)
List([1,2,3.5,1112486027], [1,29,3.5,1112484676], [1,32,3.5,1112484819], [1,47,3.5,1112484727], [1,50,3.5,1112484580], [1,112,3.5,1094785740], [1,151,4.0,1094785734])
groupBy(_.getAs[String](KeyName))
dataframe 被转化为Array[Row]之后,不能直接使用
groupBy( KeyName ) 因为 groupby 要求输入是列名
所以用
groupBy(_.getAs[String]( KeyName ))
生成 Map[String, Array[Row]]格式 数据, string为 groupby列值, Array[Row]则为groupby后 原始行 的list集合,且包含 KeyName值
var t2: Predef.Map[String, Array[Row]] = userdata.collect().groupBy(_.getAs[String]("userId"))//.agg(max(col("rating")))
println(t2("1").toList)
~~~~~~~~~
List([1,2,3.5,1112486027], [1,29,3.5,1112484676], [1,32,3.5,1112484819], [1,47,3.5,1112484727], [1,50,3.5,1112484580], [1,112,3.5,1094785740], [1,151,4.0,1094785734])
.isDefined 方法
参考链接:Scala Option(选项)
def isDefined: Boolean = !isEmpty
如果可选值是 Some 的实例返回 true,否则返回 false。
如果一个 map结构 ,key 只有 1 2 3,但是你取 4,返回空
用这个方法,判断是否有值。
与 同class中的getOrElse 有些相似。
def getOrElse[B >: A](default: => B): B
如果选项包含有值,返回选项值,否则返回设定的默认值。