spark DataFrame使用collection()方法和groupBy()、isDefined

56 篇文章 4 订阅
47 篇文章 3 订阅

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

如果选项包含有值,返回选项值,否则返回设定的默认值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值