SparkSQL demo

本文介绍了一个使用Spark SQL处理数据的具体案例。案例中定义了Person类并读取了文本文件中的数据,通过Spark SQL进行转换和查询操作,最终输出了按年龄排序的人员名单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据样本:data1.txt

xiaoming,25,chengdu
xiaohua,23,beijing
liuyang,16,hangzhou
xiaoqiang,19,zhejiang

2、demo例子

package com.test.sparksql

import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by admin on 2017/12/26-16:45.
  * Description : 
  */
object SparkSqlApplication {

  case class Person(name:String, age:Int, addr:String)

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Spark Sql Test").setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)

    import sqlContext._
    import sqlContext.implicits._

    val people = sc.textFile("D:\\SparkSqlDataTest\\data1.txt").map(_.split(",")).map( p => Person(p(0),p(1).trim.toInt,p(2))).toDF()

    people.registerTempTable("people")

    val teenagers = sql("SELECT name, age, addr FROM people ORDER BY age")

    teenagers.map( t => "name:" + t(0) + " age:" + t(1) + " addr:" + t(2)).collect().foreach(println)

    sc.stop();
  }
}

 

3、输出结果

name:liuyang age:16 addr:hangzhou
name:xiaoqiang age:19 addr:zhejiang
name:xiaohua age:23 addr:beijing
name:xiaoming age:25 addr:chengdu

 

转载于:https://www.cnblogs.com/xubiao/p/8119521.html

<think>好的,我现在需要帮助用户了解Spark SQL的基础知识,并提供一个入门教程。首先,我要回顾用户提供的引用内容,确保回答准确。 用户提到了三个引用:[^1]提到Spark SQL的内置函数位于org.apache.spark.sql.functions,[^2]涉及启动Spark与Hive结合的服务,[^3]比较了Spark SQL和Hive的异同。这些信息需要在回答中合理引用。 接下来,我应该按照用户的要求,结构清晰地分步骤讲解。首先介绍Spark SQL的基本概念,然后环境搭建,接着是核心功能如DataFrame和SQL查询,再是内置函数的使用,最后是优化技巧和应用场景。每个部分需要结合引用内容,比如在讲解内置函数时引用,在配置Hive集成时引用,在比较Spark SQL和Hive时引用。 用户可能希望教程包含实际代码示例,比如如何创建SparkSession,执行SQL查询,使用内置函数等。同时,需要确保代码格式正确,使用Python示例,因为用户提供的示例也是Python代码。还要注意用户提到的系统级指令,比如数学表达式用$...$格式,独立公式用$$...$$,但当前问题不涉及数学公式,可能可以忽略这部分,但需要仔细检查。 另外,用户要求生成相关问题,我需要根据内容提出几个相关问题,比如性能优化、与Hive的集成、应用场景等,这些问题应覆盖教程中提到的关键点,帮助用户进一步学习。 最后,需要检查回答是否符合中文要求,引用标识是否正确添加,比如在提到内置函数时添加[^1],在Hive集成时添加,在比较Hive时添加[^3]。确保回答真实可靠,结构清晰,步骤明确,代码示例正确无误。</think>### Spark SQL 入门教程 #### 一、Spark SQL 简介 Spark SQL 是 Apache Spark 用于处理结构化数据的模块,支持通过 SQL 语法或 DataFrame API 操作数据。其核心优势包括: - 兼容 Hive 元数据和查询语法 - 提供统一的 API 读取多种数据源(如 JSON、Parquet、JDBC 等) - 支持与 Spark 生态无缝集成(如 MLlib、GraphX) #### 二、环境搭建 1. **安装 Spark**: 从 [Spark 官网](https://spark.apache.org/downloads.html) 下载预编译版本,解压后配置环境变量: ```bash export SPARK_HOME=/path/to/spark export PATH=$PATH:$SPARK_HOME/bin ``` 2. **Hive 集成配置**: 修改 `conf/spark-defaults.conf` 添加 Hive 元存储配置: ```properties spark.sql.catalogImplementation=hive spark.hadoop.hive.metastore.uris=thrift://localhost:9083 ``` 启动服务时使用 `spark-sql` 或 `spark-submit` 运行查询。 #### 三、核心功能实践 1. **创建 SparkSession** 所有操作的入口点: ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("SparkSQL Demo") \ .enableHiveSupport() \ # 启用 Hive 支持 .getOrCreate() ``` 2. **DataFrame 操作** ```python # 从 CSV 加载数据 df = spark.read.csv("data.csv", header=True, inferSchema=True) # 筛选和聚合 df.filter(df.age > 20).groupBy("gender").count().show() ``` 3. **SQL 查询** ```python df.createOrReplaceTempView("people") result = spark.sql(""" SELECT gender, AVG(salary) FROM people WHERE age BETWEEN 25 AND 35 GROUP BY gender """) result.show() ``` 4. **使用内置函数** Spark SQL 提供 200+ 内置函数(位于 `org.apache.spark.sql.functions`): ```python from pyspark.sql import functions as F df.withColumn("birth_year", F.year(F.current_date() - F.col("age"))) \ .select("name", "birth_year") \ .show() ``` #### 四、性能优化技巧 1. **缓存热数据** ```python df.cache() # 或 persist() ``` 2. **分区与分桶** ```sql CREATE TABLE users PARTITIONED BY (country) CLUSTERED BY (age) INTO 32 BUCKETS ``` 3. **参数调优** ```python spark.conf.set("spark.sql.shuffle.partitions", "200") # 调整 shuffle 并行度 ``` #### 五、典型应用场景 1. 数据仓库 ETL 流程 2. 交互式分析(替代 Hive 查询) 3. 机器学习特征工程(与 MLlib 集成)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值