Spark SQL之空值Null,NaN判断和处理

Null 和 NaN

null表示无、不存在或无效的对象或地址引用。它在简单的数学运算中会转换为0,它是一个全局对象。null ==false返回的值是false。
undefined是一个全局属性,原始值undefined。它告诉我们有些东西没有赋值,没有定义。undefined不能转换成任何数字,因此在数学计算中使用它,返回的是NaN。

	val d: Double = math.sqrt(-1.0)
    println(d)
	
    val n: Boolean = math.sqrt(-1.0).isNaN
    println(n)

在这里插入图片描述


空值带来的问题

//空值加任何值都为空

spark


session.sql("select null+2 ").show()

+-----------------------+
|(CAST(NULL AS INT) + 2)|
+-----------------------+
|                   null|
+-----------------------+

hive

select NULL +2 ;

{
  "_co":null}

Spark SQL空值Null,NaN判断和处理

  • 1.filter、fill、drop

    val df: DataFrame = session.sql(
      s"""
         |select * from sparktuning.course_pay1
         |""".stripMargin)
         
 // 删除所有列的空值和NaN
val resNull=data1.na.drop()    
 resNull.limit(10).show()
+-------+------+---+------------+--------+-------------+---------+----------+------+
|affairs|gender|age|yearsmarried|children|religiousness|education|occupation|rating|
+-------+------+---+------------+--------+-------------+---------+----------+------+
|      0|  male| 37|          10|      no|            3|       18|         7|     4|
|      0|  male| 57|          15|     yes|            2|       14|         4|     4|
|      0|female| 32|          15|     yes|            4|       16|         1|     2|
|      0|  male| 22|         1.5|      no|            4|       14|         4|     5|
|      0|  male| 37|          15|     yes|            2|       20|         7|     2|
|      0|  male| 27|           4|     yes|            4|       18|         6|     4|
|      0|  male| 47|          15|     yes|            5|       17|         6|     4|
|      0|female| 22|         1.5|      no|            2|       17|         5|     4|
|      0|female| 27|           4|      no|            4|       14|         5|     4|
|      0|female| 37|          15|     yes|            1|       17|         5|     5|
+-------+------+--
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在SQL Server中,可以使用IS NULL和IS NOT NULL判断一个值是否为NULL。如果一个字段的值为NULL,则表示该字段没有值。而如果一个字段的值为空,则表示该字段有值,但是该值为空字符串或空格。 例如,假设有一个名为“name”的字段,如果该字段的值为NULL,则可以使用以下语句进行判断: SELECT * FROM table WHERE name IS NULL; 而如果该字段的值为空,则可以使用以下语句进行判断: SELECT * FROM table WHERE name = '' OR name = ' '; 需要注意的是,如果使用等于号(=)来判断NULL值,则会返回空结果集。因此,在判断NULL值时,必须使用IS NULL或IS NOT NULL。 ### 回答2: 在SQL Server中,空值NULL是两个不同的概念,但在某些情况下可以混淆。以下是SQL Server中关于NULL空值概念的详细解释和使用方法。 NULL值 当数据库中某个列中不存在数据时,该列中的值就被认为是NULL值。也就是说,NULL表示缺失或不可用的值。在SQL查询中,可以使用IS NULL或IS NOT NULL来查找NULL值。 例如,如果一个列包含NULL值,SQL查询可以像这样使用: SELECT column_name FROM table_name WHERE column_name IS NULL; 这将返回表中包含NULL值的所有行。 空值SQL Server中,一个列可以包含空值空值是指一个列中的单元格没有任何值。这与NULL值不同,因为空值表示“空集合”,而NULL值表示“未知值”。 判断空值 为了判断一个列中是否有空值,可以使用以下语句: SELECT column_name FROM table_name WHERE column_name = ''; 如果该列中存在空值,则返回结果为空。因此,如果想查找空值,可以使用以下语句: SELECT column_name FROM table_name WHERE column_name IS NULL OR column_name = ''; 这将返回所有包含NULL值或空值的行。 需要注意的是,如果想将空值转化为NULL值,可以使用以下语句: UPDATE table_name SET column_name = NULL WHERE column_name = ''; 总结 在SQL Server中,还有一些其他的关键字可以用来处理NULL空值,如COALESCE、IFNULL、NVL等等。但在正确使用时,NULL空值可以使SQL语句更加明确地描述数据。因此,需要根据具体情况来判断使用哪种方式来处理数据中的NULL空值。 ### 回答3: 在SQL Server中,NULL空值有着不同的含义和使用场景。 1. NULL NULL表示未知或不适用的值,不能与其他任何值进行比较或运算。在SQL语句中使用IS NULL或IS NOT NULL语句进行判断。 例如: SELECT * FROM table_name WHERE column_name IS NULL; SELECT * FROM table_name WHERE column_name IS NOT NULL; 2. 空值 空值是一个空串或由空格组成的字符串,可以与其他字符串进行比较或运算。在SQL语句中使用空串或N''表示空值。 例如: SELECT * FROM table_name WHERE column_name = ''; SELECT * FROM table_name WHERE column_name = N''; 需要注意的是,对于字符串类型的列,当插入空值时,需要使用NULL或INSERT语句中的DEFAULT关键字。 例如: INSERT INTO table_name (column1, column2) VALUES (NULL, 'text'); INSERT INTO table_name (column1, column2) VALUES (DEFAULT, 'text'); 在查询中,可以通过ISNULL(col, value)函数将NULL转换成指定的值,或COALESCE(col1, col2, ...)函数获取第一个非NULL值。 例如: SELECT ISNULL(column_name, 'unknown') FROM table_name; SELECT COALESCE(column1, column2, column3) FROM table_name; 总之,对于SQL Server中的NULL空值,需要正确理解其含义和使用场景,以正确处理相关的查询和数据操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值