• Spark记录-SparkSQL一些操作


    scala>val spark=new org.apache.spark.sql.SQLContext(sc)

    user.json

    {"age":"45","gender":"M","occupation":"7","userID":"4","zipcode":"02460"}{"age":"1","gend er":"F","occupation":"10","userID":"1","zipcode":"48067"}

    $hadoop dfs -put user.json /user

    scala>val userDF=spark.read.json("/user/user.json")

    scala>userDF.show(2)   #查看数据

    scala> userDF.limit(2).toJSON.foreach(x =>println(x))

    scala> userDF.printSchema

    scala>userDF.select("userID","age").show   #查询数据

    scala>userDF.select(max("age"),min("age"),avg("age")).show

    scala>userDF.select("userID", "age").filter("age > 30").show(2)

    scala>userDF.filter("age > 30").select("userID", "age").show(2)  #过滤数据

    scala> userDF.groupBy("age").count().show()

    scala> userDF.groupBy("age").agg(count("gender")).show()

    scala> userDF.groupBy("age").agg(countDistinct("gender")).show()

    scala> userDF.groupBy("age").agg("gender"->"count","occupation"->"count").show()

    第一步:得到DataFrame或Dataset val ds = ...

    第二步:注册成临时表 ds.registerTempTable("xxx")

    第三步:用SQL计算 spark.sql ("SELECT ...")

    def agg(aggExpr: (String, String), aggExprs: (String, String)*): DataFrame = {  

    groupBy().agg(aggExpr, aggExprs : _*)  }  

    还有max、mean、min、sum、avg、explode、size、sort_array、day、to_date、abs、acros、asin、atan
    总体上而言内置函数包含了五大基本类型:
    1、聚合函数,例如countDistinct、sumDistinct等;
    2、集合函数,例如sort_array、explode等
    3、日期、时间函数,例如hour、quarter、next_day
    4、数学函数,例如asin、atan、sqrt、tan、round等;
    5、开窗函数,例如rowNumber等
    6、字符串函数,concat、format_number、rexexp_extract
    7、其它函数,isNaN、sha、randn、callUDF

     Spark SQL支持的Hive特性

    Spark SQL支持多部分的Hive特性,例如:

    • Hive查询语句,包括:
      • SELECT
      • GROUP BY
      • ORDER BY
      • CLUSTER BY
      • SORT BY
    • 所有Hive运算符,包括
      • 比较操作符(=, ⇔, ==, <>, <, >, >=, <=, etc)
      • 算术运算符(+, -, *, /, %, etc)
      • 逻辑运算符(AND, &&, OR, ||, etc)
      • 复杂类型构造器
      • 数学函数(sign,ln,cos,etc)
      • 字符串函数(instr,length,printf,etc)
    • 用户自定义函数(UDF)
    • 用户自定义聚合函数(UDAF)
    • 用户自定义序列化格式器(SerDes)
    • 窗口函数
    • Joins
      • JOIN
      • {LEFT|RIGHT|FULL} OUTER JOIN
      • LEFT SEMI JOIN
      • CROSS JOIN
    • Unions
    • 子查询
      • SELECT col FROM ( SELECT a + b AS col from t1) t2
    • Sampling
    • Explain
    • 表分区,包括动态分区插入
    • 视图
    • 所有的Hive DDL函数,包括:
      • CREATE TABLE
      • CREATE TABLE AS SELECT
      • ALTER TABLE
    • 大部分的Hive数据类型,包括:
      • TINYINT
      • SMALLINT
      • INT
      • BIGINT
      • BOOLEAN
      • FLOAT
      • DOUBLE
      • STRING
      • BINARY
      • TIMESTAMP
      • DATE
      • ARRAY<>
      • MAP<>
      • STRUCT<>

    6.1.3 不支持的Hive功能

    下面是当前不支持的Hive特性,其中大部分特性在实际的Hive使用中很少用到。

    Major Hive Features

    • Tables with buckets:bucket是在一个Hive表分区内进行hash分区。Spark SQL当前不支持。

    Esoteric Hive Features

    • UNION type
    • Unique join
    • Column statistics collecting:当期Spark SQL不智齿列信息统计,只支持填充Hive Metastore的sizeInBytes列。

    Hive Input/Output Formats

    • File format for CLI: 这个功能用于在CLI显示返回结果,Spark SQL只支持TextOutputFormat
    • Hadoop archive
  • 相关阅读:
    课程开始的第一次作业
    第四次寒假作业——实现五种语言的选择
    关于改良报告与学习总结(Ⅰ)
    Vue路由守卫之路由独享守卫
    Vue路由守卫之组件内路由守卫
    Vue中如何插入m3u8格式视频,3分钟学会!
    Vue中如何使用less
    第一章 初识爬虫
    【JQuery】注册中实现图片预览
    【Python】多种方式实现生成验证码
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7987378.html
Copyright © 2020-2023  润新知