首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据入门:Spark+Kudu的广告业务项目实战笔记(二)

大数据入门:Spark+Kudu的广告业务项目实战笔记(二)

作者头像
王知无-import_bigdata
发布2020-08-28 11:08:33
2910
发布2020-08-28 11:08:33
举报

1.功能二开发

统计省份、城市数量分布情况,按照provincename与cityname分组统计

package com.imooc.bigdata.cp08.business

import com.imooc.bigdata.cp08.utils.SQLUtils
import org.apache.spark.sql.SparkSession

object ProvinceCityStatApp {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .master("local[2]")
      .appName("ProvinceCityStatApp")
      .getOrCreate()

    //从Kudu的ods表中读取数据,然后按照省份和城市分组即可
    val sourceTableName = "ods"
    val masterAddress = "hadoop000"

    val odsDF = spark.read.format("org.apache.kudu.spark.kudu")
      .option("kudu.table", sourceTableName)
      .option("kudu.master", masterAddress)
      .load()
    //odsDF.show(false)

    odsDF.createOrReplaceTempView("ods")
    val result = spark.sql(SQLUtils.PROVINCE_CITY_SQL)
    result.show(false)

    spark.stop()

  }

}

其中SQLUtils中填写SQL代码:

 lazy val PROVINCE_CITY_SQL = "select provincename,cityname,count(1) as cnt from ods group by provincename,cityname" lazy val PROVINCE_CITY_SQL = "select provincename,cityname,count(1) as cnt from ods group by provincename,cityname"

运行结果如图所示:

2.数据落地Kudu

其中KuduUtils.sink内容详见上一篇文章:

    val sinkTableName = "province_city_stat"
    val partitionId = "provincename"
    val schema = SchemaUtils.ProvinceCitySchema

    KuduUtils.sink(result,sinkTableName,masterAddress,schema,partitionId)

其中的Schema信息为:

 lazy val ProvinceCitySchema: Schema = {
    val columns = List(
      new ColumnSchemaBuilder("provincename",Type.STRING).nullable(false).key(true).build(),
      new ColumnSchemaBuilder("cityname",Type.STRING).nullable(false).key(true).build(),
      new ColumnSchemaBuilder("cnt",Type.INT64).nullable(false).key(true).build()
    ).asJava
    new Schema(columns)
  }

导入之后查一下:

    spark.read.format("org.apache.kudu.spark.kudu")
      .option("kudu.master",masterAddress)
      .option("kudu.table",sinkTableName)
      .load().show()

有数据就可以了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术与架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.数据落地Kudu
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档