Spark的Dataset操作(二)-过滤的filter和where

Spark的Dataset操作(二)-过滤的filter和where

话说第一集发完也没看,格式乱成那样子,太可怕了。要不是有好心人评论了下,我还不知道,囧。这次换个Markdown编辑器接着来吧。

上一篇说的是Select的用法,这次说说Where部分。Where部分可以用filter函数和where函数。这俩函数的用法是一样的,官网文档里都说where是filter的别名。

数据还是用上一篇里造的那个dataset:

scala> val df = spark.createDataset(Seq(
  ("aaa",1,2),("bbb",3,4),("ccc",3,5),("bbb",4, 6))   ).toDF("key1","key2","key3")
df: org.apache.spark.sql.DataFrame = [key1: string, key2: int ... 1 more field]

scala> df.show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| aaa|   1|   2|
| bbb|   3|   4|
| ccc|   3|   5|
| bbb|   4|   6|
+----+----+----+

##filter函数##
从Spark官网的文档中看到,filter函数有下面几种形式:

def filter(func: (T) ⇒ Boolean): Dataset[T]
def filter(conditionExpr: String): Dataset[T]
def filter(condition: Column): Dataset[T]

所以,以下几种写法都是可以的:

scala> df.filter($"key1">"aaa").show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| bbb|   3|   4|
| ccc|   3|   5|
| bbb|   4|   6|
+----+----+----+


scala> df.filter($"key1"==="aaa").show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| aaa|   1|   2|
+----+----+----+

scala> df.filter("key1='aaa'").show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| aaa|   1|   2|
+----+----+----+

scala> df.filter("key2=1").show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| aaa|   1|   2|
+----+----+----+

scala> df.filter($"key2"===3).show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| bbb|   3|   4|
| ccc|   3|   5|
+----+----+----+

scala> df.filter($"key2"===$"key3"-1).show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| aaa|   1|   2|
| bbb|   3|   4|
+----+----+----+

其中, ===是在Column类中定义的函数,对应的不等于是=!=
$"列名"这个是语法糖,返回Column对象

##where函数##

scala> df.where("key1 = 'bbb'").show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| bbb|   3|   4|
| bbb|   4|   6|
+----+----+----+


scala> df.where($"key2"=!= 3).show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| aaa|   1|   2|
| bbb|   4|   6|
+----+----+----+


scala> df.where($"key3">col("key2")).show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| aaa|   1|   2|
| bbb|   3|   4|
| ccc|   3|   5|
| bbb|   4|   6|
+----+----+----+


scala> df.where($"key3">col("key2")+1).show
+----+----+----+
|key1|key2|key3|
+----+----+----+
| ccc|   3|   5|
| bbb|   4|   6|
+----+----+----+

嗯嗯,要看书去了,就到这吧,下次接着写分组聚合的部分。

喜欢这些内容的话,可以关注一下公众号哈~
### 关于 Apache Spark Dataset 的文档与使用案例 #### 定义与特性 DatasetSpark 中用于处理结构化数据的一种接口,它结合了 RDD DataFrame 的优点,在提供强类型支持的同时也保持了高效的执行性能。相比于传统的 RDD 接口,Dataset 提供更优化的操作方式以及更好的编译期错误检测能力[^1]。 #### 创建 Dataset 实例的方法 创建 Dataset 主要有两种途径: - **从现有集合转换** 通过 `toDS()` 方法可以直接将 Scala 集合对象转化为对应的 Dataset 对象。 ```scala val dsFromCollection = Seq(1, 2, 3).toDS() ``` - **基于 SQL 查询构建** 利用 SparkSession 来注册表并执行查询语句返回结果集作为 Dataset 类型的数据源。 ```scala spark.createDataset(spark.range(1000).selectExpr("id * 2 as double_id").as[Int]) ``` #### 基本操作实例展示 下面是一些常见的 Dataset 操作例子: - **过滤(filter/where)**:筛选符合条件的记录 ```scala ds.filter(_ % 2 == 0) // 过滤偶数项 ``` - **映射(map/transformation)**:对每条记录应用函数变换 ```scala ds.map(x => x + 1) // 将所有数值加一 ``` - **聚合(groupByKey/reduceGroups)**:按键分组并对各组内的值做累积运算 ```scala case class Record(key: Int, value: String) // 组合成元组后再进行reduce操作 ds.groupByKey(_.key).reduceGroups((a,b)=>Record(a.key,a.value+b.value)) ``` 这些功能使得开发者可以更加方便地编写高效且易于维护的大数据分析程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值