在spark dataset/dataframe操作过程中,我们经常会遇到对于一个列值的一些判断情况,是否为NULL,创建一个新列等,本文讲解了常用的增加列的方法,并且对于列空值判断,填充处理以及查询的api做了详细的描述和实例讲解,阅读完可以掌握列的处理相关方法。
增加列
Spark dataframe提供了withColumn函数来进行添加列或者替换列<指定的列名字跟之前的一样时候>,然后返回一个新的dataframe,添加列有以下几种方法:
-
利用常量进行增加列,固定值
import org.apache.spark.sql.functions.lit
df.withColumn("new_column", lit(1)/lit("name"))
-
利用当前已有列变换新增
df.withColumn("rsrp2", df("rsrp") * 2)
-
select增加列
df.select(col("*"), when(df("rsrp") > 10, lit(">10")).when(df("rsrp") === 10, "=10").otherwise("<10").as("rsrp_compare10"))
-
case when当参数嵌套udf
df.withColumn("r",
when(df("rsrp").isNull, lit(null)).otherwise(udf1(df("rsrp")).cast(DataTypes.IntegerType)
-
使用expr函数
df.withColumn("rsrp4", expr("rsrp * 4")).show
列空值判断
NaN和NULL值判断
df("name").isNull
df("name").isNotNull
df("sum").isNaN
列空值删除
// 删除所有列的空值和NaN
df.na.drop()
// 删除部分列的控制和NaN
df.na.drop(Array("gender","yearsmarried"))
列空值填充
// 所有列空值填充为
df.na.fill("notNull")
//对指定的列空值填充
// 指定的多个列填充为相同的值
df.na.fill(value="notNull",cols=Array("gender","yearsmarried"))
// 分别不同列指定不同的值
df.na.fill(Map("gender"->"xxx", "name"->"yyy"))
查询空值列
df.filter("gender is null").select("gender").limit(10).show
df.filter( df("gender").isNull ).select("gender").limit(10).show
参考
-
https://www.cnblogs.com/wwxbi/p/6011422.html
-
https://www.cnblogs.com/yy3b2007com/p/9872492.html