• (4)spark sql(更新中~~~)


    楔子

    spark sql,显然就是让我们像写sql一样去编写spark程序。但是spark它并不仅仅是sql,sql只是spark提供的功能之一,而且还支持DataFrame。想想hive,它们存在的意义都是类似的。因为熟悉sql的人是很多的,如果一款框架能够让你像sql一样去编写程序,那么它一定是灰常受欢迎的,就类似于当初的hive一样,hive刚出来的时候也特别火。多余的不多说了,我们来看看如何使用python来操作spark的sql组件。

    python操作spark sql基础

    SparkSession

    正如我们想要操作RDD一样,我们需要有一个SparkContext对象,那么这里也是类似的,需要一个SparkSession对象。而我们说启动pyspark shell的时候,默认给我们创建一个SparkContext对象:sc,同理也创建了一个SparkSession对象:spark。如果我们手动创建的话,可以这么创建。

    from pyspark.sql import SparkSession
    spark = SparkSession().builder.appName("name").config("spark.some.config.option", "some-value").getOrCreate()
    

    创建一个DataFrame

    SparkSession对象可以将一个已存在的RDD、hive表、其它的数据源转成DataFrame,比如我们将一个json文件变成DataFrame。

    >>> # spark是默认的SparkSession对象,调用其内部的.read.json方法读取数据即可得到DataFrame
    >>> df = spark.read.json("file:///root/girl.json")
    >>> # 调用show方法展示数据
    >>> df.show()
    +---+------+--------+
    |age|gender|    name|
    +---+------+--------+
    | 17|female|古明地觉|
    |400|female|四方茉莉|
    | 18|female|椎名真白|
    +---+------+--------+
    >>> 
    

    DataFrame常规操作

    >>> # 查看schema
    >>> df.printSchema()
    root
     |-- age: long (nullable = true)
     |-- gender: string (nullable = true)
     |-- name: string (nullable = true)
    
    >>> # 选择某一列
    >>> df.select("name").show()
    +--------+
    |    name|
    +--------+
    |古明地觉|
    |四方茉莉|
    |椎名真白|
    +--------+
    >>> # 还可以通过df来指定
    >>> df.select(df["age"], df.age).show()
    +---+---+
    |age|age|
    +---+---+
    | 17| 17|
    |400|400|
    | 18| 18|
    +---+---+
    >>> # 如果带运算的话,那么必须加上df
    >>> df.select(df["age"] + 1).show()
    +---------+
    |(age + 1)|
    +---------+
    |       18|
    |      401|
    |       19|
    +---------+
    >>> # 条件筛选
    >>> df.filter(df["age"]>17).show()
    +---+------+--------+
    |age|gender|    name|
    +---+------+--------+
    |400|female|四方茉莉|
    | 18|female|椎名真白|
    +---+------+--------+
    >>> # 聚合
    >>> df.groupBy("age").count().show()
    +---+-----+                                                                     
    |age|count|
    +---+-----+
    | 17|    1|
    |400|    1|
    | 18|    1|
    +---+-----+
    

    将DataFrame注册成一张局部视图

    >>> # 将df注册成一张临时视图,名叫girl
    >>> df.createOrReplaceTempView("girl")
    >>> # 执行查询语句
    >>> sql_df = spark.sql("select * from girl")
    >>> # 显示   
    >>> sql_df.show()
    +---+------+--------+
    |age|gender|    name|
    +---+------+--------+
    | 17|female|古明地觉|
    |400|female|四方茉莉|
    | 18|female|椎名真白|
    +---+------+--------+
    
    

    将DataFrame注册成一张全局视图

    >>> # 注册成全局视图
    >>> df.createGlobalTempView("girl")
    >>> # 访问的时候要通过global_temp.来访问
    >>> spark.sql("select * from global_temp.girl").show()
    +---+------+--------+
    |age|gender|    name|
    +---+------+--------+
    | 17|female|古明地觉|
    |400|female|四方茉莉|
    | 18|female|椎名真白|
    +---+------+--------+
    
    
  • 相关阅读:
    Nginx/Apache图片缩略图技术
    MySQL 备份和恢复
    MySQL主从复制
    xcode针对不同IOS版本的代码编译问题
    java 5 ReadWriteLock
    java 5 Lock
    结对-及格程序查询系统-结对项目总结
    团队-象棋游戏-开发文档
    结对-及格程序查询-最终程序
    结对-及格程序查询-测试过程
  • 原文地址:https://www.cnblogs.com/traditional/p/12333036.html
Copyright © 2020-2023  润新知