在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