spark Dataframe数据处理常用方法总结

6 篇文章 0 订阅
2 篇文章 0 订阅

以下方法使用scala, df类型为Dataframe

常用的包:

import org.apache.spark.sql.functions._
import spark.implicits._

1. 新增一列

df = df.withColumn("new col", lit(null)),  //新的一列名字为"new col", 使用空值进行填充

2. 列名重新命名

df = df.withColumnRenamed("旧列名", "新列名")

3. 根据条件进行判断来对Dataframe中某列的值进行填充

df = df.withColumn("需要进行填充的列名", when(条件判断, $"用于填充的列名")
  .otherwise($"用于填充的列名"))

4. 删除一列

df = df.drop("列a", "列B")

5. 两个dataframe进行关联

df3 = df1.join(df2, seq("关联的列"), "left")

6. 分组之后计算最小值

df = df.groupBy("order_no", "seq_no", "product_code").agg(("diff_Date", "min"))

7. 筛选符合条件的数据

df = df.where($"cancel_dt".isNotNull)

8. 选出指定列

df = df.select("cancel_dt")

9. udf

dfNull = dfNull.withColumn("province_fill", addressClean.proCodeToProName(col("province_fill")))
val proCodeToProName: UserDefinedFunction = udf((provinceCode: String) => {
    var cleanProvince = provinceFullMap.getOrElse(provinceCode, "未匹配省市")
    cleanProvince
  })

 10. case class

case class ChargeByPolicyPremData(var order_no: String){}

  val reqPolicyBaseDataDs = reqPolicyDf.as[ChargeByPolicyPremData]
    var reqPolicyBaseDataDf: DataFrame = reqPolicyBaseDataDs.map(lines => (
      lines.req_id,
      lines.order_no
    )).toDF("req_id", "order_no")

11. 开窗函数

  把需要的字段,进行拼接
    val WindowSpec = Window.partitionBy( "A").orderBy($"create_at".desc)
    dfProcessed = dfProcessed.withColumn("concatString", base64(concat($"B")))

    dfProcessed = dfProcessed.withColumn("concatString_next",lead($"concatString",1, "99").over(WindowSpec))
        .where($"concatString_next" =!= $"concatString")
        .drop("concatString", "concatString_next")
 var dfProceesed = df.withColumn("rank", row_number() over Window.partitionBy("A")
      .orderBy($"create_at".desc))
      .where($"rank" === 1)
      .drop("rank")

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ashley_JIANG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值