生产环境_Apache Spark技术大牛的实践:使用DataFrame API计算唯一值数量并展示技术(属性报告)

业务背景

        给前端提供算法集成好的数据,对算法处理后的数据进行进一步删选展示

        可以使用下面代码运行一下看看结果,听有趣的,我写的代码中计算了不同字段的值的数量,并生成了一个显示字符串来描述这些数据的分布情况然后使用"details"列限制显示的行数,以便更方便地查看和分析数据,其实是生产环境中的应用,为了不涉及敏感信息,进行了数据和字段的脱敏处理。

样例数据

北京,001,23,2.123,中国,12121
北京,001,24,34.2,中国,12121
南京,002,32,23.12,中国1,12312
南京,002,31,23.44,中国1,12312

样例实现内容具体如下   

 #展示的话
"本学校鸟类飞行夜间活动区域分布为xx个鸟,分别布在cc个区域"
 # eg:xx代表统计后的鸟类个数,cc标识统计后的区域个数

代码实现:

import org.apache.spark.sql.functions.lit
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{Row, SparkSession}
import org.apache.spark.sql.types.{StringType, StructField, StructType}



object bg {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Parent_child_v3").setMaster("local[1]")
    val sc = new SparkContext(conf)
    val spark = SparkSession.builder.appName("Parent_child_v3").getOrCreate()

    import spark.implicits._

    val df1 = sc.textFile("C:\\zzcode\\workplace\\src\\main\\data\\jd_Data")

    val schema = StructType(
      Array(
        StructField("区域名称", StringType, nullable = true),
        StructField("区域编号", StringType, nullable = true),
        StructField("bird", StringType, nullable = true),
        StructField("score", StringType, nullable = true) ,
        StructField("国家", StringType, nullable = true),
        StructField("区域顶点集", StringType, nullable = true)
      )
    )

    val rowRDD = df1.map(line => {
      val parts = line.split(",")
      Row(parts(0), parts(1), parts(2), parts(3),parts(4),parts(5))
    })

    val df = spark.createDataFrame(rowRDD, schema)
    df.show(false)
    //+--------+--------+---+-----+-----+----------+
    //|区域名称|区域编号|bird |score|国家 |区域顶点集|
    //+--------+--------+---+-----+-----+----------+
    //|北京    |001     |23 |2.123|中国 |12121     |
    //|北京    |001     |24 |34.2 |中国 |12121     |
    //|南京    |002     |32 |23.12|中国1|12312     |
    //|南京    |002     |31 |23.44|中国1|12312     |
    //+--------+--------+---+-----+-----+----------+

    val birdCount = df.select("bird").distinct().count()
    val regionNameCount = df.select("区域名称").distinct().count()
//
    val displayString = "本学校学生区域分布为" + birdCount + "个bird,分布在" + regionNameCount + "个区域名称"
    println(displayString)

  //
  val updatedDataFrame = df.withColumn("details", lit(displayString))
    updatedDataFrame.show(false)
    val detailsRow = updatedDataFrame.select("details").limit(1)
    detailsRow.show(false)
  }
}
//2023_12_by_Matrix70
//作者:https://blog.csdn.net/qq_52128187?type=blog,如若转载,请注明出处

代码运行结果截图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值