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
    评论
Spark常用的数据源格式有以下几种: 1. CSV(逗号分隔值):CSV是一种常见的数据格式,每行数据由逗号分隔。Spark可以通过使用csv()函数加载CSV文件,并将其转化为DataFrame进行处理和分析。 2. JSON(JavaScript对象表示法):JSON是一种轻量级的数据交换格式,具有易于阅读和编写的特点。Spark可以使用json()函数将JSON文件加载成DataFrame。 3. Parquet:Parquet是一种列式存储格式,它能够提供更高的压缩率和更好的查询性能。Spark可以使用parquet()函数加载Parquet文件,并对其进行处理和分析。 4. ORC(Optimized Row Columnar):ORC是一种优化的行列存储格式,它在查询性能和压缩率方面表现优秀。Spark可以使用orc()函数加载ORC文件,并对其进行处理和分析。 5. Avro:Avro是一种数据序列化系统,它使用JSON格式定义数据结构,支持动态模式演化。Spark可以使用avro()函数加载Avro文件,并将其转化为DataFrame进行处理和分析。 6. JDBC(Java数据库连接):Spark可以通过JDBC连接不同类型的关系型数据库,如MySQL、PostgreSQL、Oracle等。可以使用Spark的JDBC连接器读取和写入关系型数据库中的数据。 7. Hadoop文件系统(HDFS):Spark可以直接读取和写入Hadoop分布式文件系统中的文件,如HDFS、S3等。可以使用Spark的文件系统API来操作这些文件。 总之,Spark支持各种常见的数据源格式,可以通过不同的API函数来加载和处理这些数据,以及与其他数据源进行交互。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ashley_JIANG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值