spark數據處理實戰之列空值&新增列處理

在spark dataset/dataframe操作過程中,我們經常會遇到對於一個列值的一些判斷情況,是否爲NULL,創建一個新列等,本文講解了常用的增加列的方法,並且對於列空值判斷,填充處理以及查詢的api做了詳細的描述和實例講解,閱讀完可以掌握列的處理相關方法。

增加列

Spark dataframe提供了withColumn函數來進行添加列或者替換列<指定的列名字跟之前的一樣時候>,然後返回一個新的dataframe,添加列有以下幾種方法:

  1. 利用常量進行增加列,固定值

    import org.apache.spark.sql.functions.lit
    df.withColumn("new_column", lit(1)/lit("name"))  
    
  2. 利用當前已有列變換新增

     df.withColumn("rsrp2", df("rsrp") * 2)
    
  3. select增加列

    df.select(col("*"),  when(df("rsrp") > 10, lit(">10")).when(df("rsrp") === 10, "=10").otherwise("<10").as("rsrp_compare10"))
    
  4. case when當參數嵌套udf

    df.withColumn("r",
       when(df("rsrp").isNull, lit(null)).otherwise(udf1(df("rsrp")).cast(DataTypes.IntegerType)
    
  5. 使用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    

參考

  1. https://www.cnblogs.com/wwxbi/p/6011422.html

  2. https://www.cnblogs.com/yy3b2007com/p/9872492.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章