Spark-SQL编程

1. Spark-SQL连接Hive

 连接方式概述:Spark SQL编译时可选择包含Hive支持,包含后能支持Hive表访问、UDF、HQL等功能,且无需事先安装Hive。连接方式有内嵌Hive、外部Hive、Spark-SQL CLI、Spark beeline及代码操作。

 具体连接方式

 内嵌Hive:使用时无需额外操作,但实际生产中很少使用。

 外部Hive:在spark-shell中连接外部Hive,需拷贝hive-site.xml到conf/目录并修改连接地址,将MySQL驱动拷贝到jars/目录,拷贝core-site.xml和hdfs-site.xml到conf/目录,最后重启spark-shell。

 Spark beeline:Spark Thrift Server兼容HiveServer2,可使用hive的beeline访问。连接步骤与连接外部Hive类似,还需启动Thrift Server,再用beeline连接。

 Spark-SQL CLI:可在本地运行Hive元数据服务并执行查询任务。将mysql驱动和hive-site.xml分别放入jars/和conf/目录,运行bin/目录下的spark-sql.cmd即可。

 代码操作Hive:导入spark-hive_2.12和hive-exec依赖,将hive-site.xml拷贝到项目resources目录。代码中创建SparkSession时启用Hive支持,可执行Hive相关操作。若出现权限问题,可设置HADOOP_USER_NAME解决;还可通过配置spark.sql.warehouse.dir指定数据库仓库地址。

 

2. 统计有效数据条数及用户数量最多的前二十个地址

 实验内容:利用Spark-SQL统计有效数据(uid、phone、addr字段均无空值)条数,并找出用户数量最多的前二十个地址。

 数据处理思路:数据为json格式,需用get_json_object函数转换格式后分析处理。

 代码示例(Scala)

 

scala

import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.functions.get_json_object

 

object SparkSQLExperiment {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder()

     .appName("SparkSQLExperiment")

     .master("local[*]")

     .getOrCreate()

 

    // 读取json数据

    val df = spark.read.json("path/to/your/json/data.json")

 

    // 提取字段并过滤有效数据

    val validData = df.select(

      get_json_object($"value", "$.uid").alias("uid"),

      get_json_object($"value", "$.phone").alias("phone"),

      get_json_object($"value", "$.addr").alias("addr")

    ).filter($"uid".isNotNull && $"phone".isNotNull && $"addr".isNotNull)

 

    // 统计有效数据条数

    val validDataCount = validData.count()

    println(s"有效数据条数: $validDataCount")

 

    // 按地址分组统计用户数量并取前二十

    val top20Addrs = validData.groupBy("addr").count().orderBy($"count".desc).limit(20)

    top20Addrs.show()

 

    spark.stop()

  }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值