zoukankan      html  css  js  c++  java
  • spark sql

    入门与使用参考这一片文档即可:

    https://www.cnblogs.com/takemybreathaway/articles/10172339.html

    方法(sql使我们定义的sql = new SQLContext(sc)) df是一个DataFrame对象 实例说明
    sql.read.table(tableName) 读取一张表的数据
    df.where(),          df.filter()

    过滤条件,相当于sql的where部分;

    用法:选择出年龄字段中年龄大于20的字段。

    返回值类型:DataFrame

    df.where("age >= 20"),df.filter("age >= 20")

    df.limit()

    限制输出的行数,对应于sql的limit

    用法:限制输出一百行

    返回值类型:DataFrame

    df.limit(100)

    df.join()

    链接操作,相当于sql的join

    对于join操作,下面会单独进行介绍

    df.groupBy()

    聚合操作,相当于sql的groupBy

    用法:对于某几行进行聚合

    返回值类型:DataFrame

    df.groupBy("id")

    df.agg() 求聚合用的相关函数,下面会详细介绍
    df.intersect(other:DataFrame) 求两个DataFrame的交集
    df.except(other:DataFrame) 求在df中而不在other中的行
    df.withColumn(colName:String,col:Column)

    增加一列

    df.withColumnRenamed(exName,newName) 对某一列的名字进行重新命名

    df.map(),

    df.flatMap,

    df.mapPartitions(),

    df.foreach()

    df.foreachPartition()

    df.collect()

    df.collectAsList()

    df.repartition()

    df.distinct()

    df.count()

    这些方法都是spark的RDD的基本操作,其中在DataFrame类中也封装了这些方法,需要注意的是这些方法的返回值是RDD类型的,不是DataFrame类型的,在这些方法的使用上,一定要记清楚返回值类型,不然就容易出现错误
    df.select()

    选取某几列元素,这个方法相当于sql的select的功能

    用法:返回选择的某几列数据

    返回值类型:DataFrame

    df.select("id","name")

    以上是两个都是一写基本的方法,下面就详细介绍一下join和agg,na,udf操作

     sparkSQL的agg操作

     其中sparkSQL的agg是sparkSQL聚合操作的一种表达式,当我们调用agg时,其一般情况下都是和groupBy()的一起使用的,选择操作的数据表为:

    wKioL1fVFMzjucKzAAEUkKPh1AA902.png-wh_50

    1
    2
    3
    4
    val pSalar = new SQLContext(sc).read.json("salary.txt")
    val group = pSalar.groupBy("name").agg("salary" -> "avg")
    val group2 = pSalar.groupBy("id","name").agg("salary" -> "avg")
    val group3 = pSalar.groupBy("name").agg(Map("id" -> "avg","salary"->"max"))

    得到的结过如下:

       group的结果                                         group2                                           group3

    wKiom1fVHoODlce6AAD2HXgd44M826.png-wh_50   wKioL1fVHoOi8ZByAAELMO8I5kw789.png-wh_50    wKiom1fVHoSDVySrAAEKInS_Hh8231.png-wh_50 

    使用agg时需要注意的是,同一个字段不能进行两次操作比如:agg(Map("salary" -> "avg","salary" -> "max"),他只会计算max的操作,原因很简单,agg接入的参数是Map类型的key-value对,当key相同时,会覆盖掉之前的value。同时还可以直接使用agg,这样是对所有的行而言的。聚合所用的计算参数有:avg,max,min,sum,count,而不是只有例子中用到的avg

  • 相关阅读:
    snmp安装zabbix
    〖Demo〗-- 用Django实现Video页面分类查询
    〖Python〗-- Django的ORM性能优化建议
    〖Web〗-- 新特性之WebSocket
    〖Python〗-- 数据结构
    〖缓存〗-- Memcached 与 Redis
    〖算法〗-- NB二人组:堆排序、归并排序
    〖算法〗-- 快速排序 、希尔排序、计数排序
    〖算法〗-- 排序lowB三人组:冒泡排序、选择排序、 插入排序
    〖算法〗-- 递归、二分查找、列表查找
  • 原文地址:https://www.cnblogs.com/lshan/p/13306276.html
Copyright © 2011-2022 走看看