在Scala中,Double类型的空值保存为NaN,其他保存为null。对于Double可以直接使用:bianliang.isNaN判断其是否是空值,那么在一个多行多列的DataSet或者DataFrame中怎么进行处理呢。

一、几种查找空值的方法

1、Column方法

column.isNull/column.isNotNull/column.isNaN

  1. df("col1").isNull
  2. df.filter(df("col1").isNull)就可以获取所有col1列为空值的行了。
  3. //获取col1字段所有空列
  4. df.filter(df("col1").isNull).count()
  5. df.filter(df("col1").isNotNull).count()

2、类sql方法

  1. //获取col1字段所有空列
  2. data1.filter("col1 is null").select("col1").limit(10).show
  3. //获取col1字段的所有非空列
  4. data1.filter("col1 is not null").select("col1").limit(10).show
  5. data1.filter("col1 <>''").select("col1").limit(10).show

二、na方法

  1. val naDF:DataFrameNaFunctions=df.na

调用na方法会返回一个DataFrameNaFunctions。其只有3个方法,drop、fill、replace。

2.1 na.drop方法

2.1.1 删除所有列的空值以及NaN

  1. val resNull=df.na.drop()

返回一个新DF,剔除了包含空值的行。

2.1.2 删除某一列的空值和NaN

  1. val res =df.na.drop(Array("col1","col2"))

2.1.3 删除某一列的非空非NaN但是值低于10的。

  1. df.na.drop(10,Array("col1","col2"))

2.2 na.fill方法

2.2.1 填充所有空值的列

  1. val res123=df.na.fill("新值")
  2. val res123=df.na.fill(10)​

2.2.2 对指定的空值进行填充

传入一个值,以及所有需要用此值填充的Array,或者使用Map,按照列进行不同填充。

  1. val res2=data1.na.fill(value="wangxiao111",cols=Array("gender","yearsmarried") )
  2. val res3=data1.na.fill(Map("gender"->"wangxiao222","yearsmarried"->"wangxiao567") )

2.3 na.replace方法

2.3.1 将指定列的指定值替换为对应的值

  1. df.na.replace("col1",Map(1->2)) //将col1列的值为1替换为2.
  2. df.na.replace(Array("col1","col2"),Map(1->2))​​
  3. df.na.replace[Int]("col1",Map(1->2))//可以添加泛型,Map中的key和value类型必须与其保持一致。

最新文章

  1. java 持久框架mybatis的初步学习
  2. 删除root子目录,如何恢复子目录配置文件
  3. pycharm的安装
  4. marquee滚动语法
  5. 内存分配、C++变量的生命周期和作用域
  6. EXTJS项目实战经验总结一:日期组件的change事件:
  7. Android Failure [INSTALL_FAILED_OLDER_SDK]
  8. Oracle中trunc函数、round 函数、ceil函数和floor函数的使用
  9. thinkphp中Conf的配置
  10. bat执行java程序的脚本解析
  11. C#中的??是什么意思
  12. 实现图片的循环滚动——JS的简单应用
  13. 机器学习(4)Hoeffding Inequality--界定概率边界
  14. pipe size设置
  15. Ubuntu 下重启网络的方法
  16. 一脸懵逼加从入门到绝望学习hadoop之 org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=Administrator, access=WRITE, inode=&quot;/&quot;:root:supergroup:drwxr-xr报错
  17. 乾坤合一~Linux设备驱动之终端设备驱动
  18. php 利用root 权限执行shell脚本
  19. Jmeter(三十九)获取响应结果中参数出现的次数(转载)
  20. 005_系统运维之SLA与SLO的关系

热门文章

  1. AC日记——小B的询问 洛谷 P2709
  2. 急!急!急!请问win32api参数乱码如何解决!
  3. 【C#】构建可枚举类型(IEnumerable和IEnumerator)
  4. 用python正则表达式提取网页的url
  5. Bootstrap Table 使用示例及代码
  6. Abp数据库迁移注意事项
  7. Xamarin Android项目提示SDK版本太老
  8. Oracle 索引扫描的五种类型
  9. [BZOJ3000]Big Number(斯特林公式)
  10. 【二分】Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market