Spark2-对于Null/Nan的处理
2024-08-27 09:31:45
在Scala中,Double类型的空值保存为NaN,其他保存为null。对于Double可以直接使用:bianliang.isNaN判断其是否是空值,那么在一个多行多列的DataSet或者DataFrame中怎么进行处理呢。
一、几种查找空值的方法
1、Column方法
column.isNull/column.isNotNull/column.isNaN
- df("col1").isNull
- df.filter(df("col1").isNull)就可以获取所有col1列为空值的行了。
- //获取col1字段所有空列
- df.filter(df("col1").isNull).count()
- df.filter(df("col1").isNotNull).count()
2、类sql方法
- //获取col1字段所有空列
- data1.filter("col1 is null").select("col1").limit(10).show
- //获取col1字段的所有非空列
- data1.filter("col1 is not null").select("col1").limit(10).show
- data1.filter("col1 <>''").select("col1").limit(10).show
二、na方法
- val naDF:DataFrameNaFunctions=df.na
调用na方法会返回一个DataFrameNaFunctions。其只有3个方法,drop、fill、replace。
2.1 na.drop方法
2.1.1 删除所有列的空值以及NaN
- val resNull=df.na.drop()
返回一个新DF,剔除了包含空值的行。
2.1.2 删除某一列的空值和NaN
- val res =df.na.drop(Array("col1","col2"))
2.1.3 删除某一列的非空非NaN但是值低于10的。
- df.na.drop(10,Array("col1","col2"))
2.2 na.fill方法
2.2.1 填充所有空值的列
- val res123=df.na.fill("新值")
- val res123=df.na.fill(10)
2.2.2 对指定的空值进行填充
传入一个值,以及所有需要用此值填充的Array,或者使用Map,按照列进行不同填充。
- val res2=data1.na.fill(value="wangxiao111",cols=Array("gender","yearsmarried") )
- val res3=data1.na.fill(Map("gender"->"wangxiao222","yearsmarried"->"wangxiao567") )
2.3 na.replace方法
2.3.1 将指定列的指定值替换为对应的值
- df.na.replace("col1",Map(1->2)) //将col1列的值为1替换为2.
- df.na.replace(Array("col1","col2"),Map(1->2))
- df.na.replace[Int]("col1",Map(1->2))//可以添加泛型,Map中的key和value类型必须与其保持一致。
最新文章
- java 持久框架mybatis的初步学习
- 删除root子目录,如何恢复子目录配置文件
- pycharm的安装
- marquee滚动语法
- 内存分配、C++变量的生命周期和作用域
- EXTJS项目实战经验总结一:日期组件的change事件:
- Android Failure [INSTALL_FAILED_OLDER_SDK]
- Oracle中trunc函数、round 函数、ceil函数和floor函数的使用
- thinkphp中Conf的配置
- bat执行java程序的脚本解析
- C#中的??是什么意思
- 实现图片的循环滚动——JS的简单应用
- 机器学习(4)Hoeffding Inequality--界定概率边界
- pipe size设置
- Ubuntu 下重启网络的方法
- 一脸懵逼加从入门到绝望学习hadoop之 org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=Administrator, access=WRITE, inode=";/";:root:supergroup:drwxr-xr报错
- 乾坤合一~Linux设备驱动之终端设备驱动
- php 利用root 权限执行shell脚本
- Jmeter(三十九)获取响应结果中参数出现的次数(转载)
- 005_系统运维之SLA与SLO的关系
热门文章
- AC日记——小B的询问 洛谷 P2709
- 急!急!急!请问win32api参数乱码如何解决!
- 【C#】构建可枚举类型(IEnumerable和IEnumerator)
- 用python正则表达式提取网页的url
- Bootstrap Table 使用示例及代码
- Abp数据库迁移注意事项
- Xamarin Android项目提示SDK版本太老
- Oracle 索引扫描的五种类型
- [BZOJ3000]Big Number(斯特林公式)
- 【二分】Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market