分享

求问sparksql怎么用SQL语句实现查找分位数

yangyixin 发表于 2017-7-6 15:38:08 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 18558
无比小白的。。求指方向
完全是hadoop和spark的新手,被要求用sparkSQL语句实现查找分位数,无从下手,
求问spark怎么实现呢

已有(5)人评论

跳转到指定楼层
w123aw 发表于 2017-7-6 15:48:52
其实可以和传统数据库类比。传统的sql可以是通过shell实现,也可以通过将sql嵌入代码中。
shell中使用sql应该不用说了。代码可以参考下面
spark sql为何会产生。原因很多,比如用spark编程完成比较繁琐,需要多行代码来完成,spark sql写一句sql就能搞定了。那么spark sql该如何使用。


1.初始化spark sql
为了开始spark sql,我们需要添加一些imports 到我们程序。如下面例子1
例子1Scala SQL imports

[mw_shl_code=scala,true]// Import Spark SQL
import org.apache.spark.sql.hive.HiveContext
// Or if you can't have the hive dependencies
import org.apache.spark.sql.SQLContext[/mw_shl_code]
下面引用一个例子
首先在maven项目的pom.xml中添加Spark SQL的依赖。
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.10</artifactId>
    <version>1.5.2</version>
</dependency>

[mw_shl_code=scala,true]package www.aboutyun.com

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

object InferringSchema {
  def main(args: Array[String]) {

    //创建SparkConf()并设置App名称
    val conf = new SparkConf().setAppName("aboutyun")
    //SQLContext要依赖SparkContext
    val sc = new SparkContext(conf)
    //创建SQLContext
    val sqlContext = new SQLContext(sc)

    //从指定的地址创建RDD
    val lineRDD = sc.textFile(args(0)).map(_.split(" "))

    //创建case class
    //将RDD和case class关联
    val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))
    //导入隐式转换,如果不到人无法将RDD转换成DataFrame
    //将RDD转换成DataFrame
    import sqlContext.implicits._
    val personDF = personRDD.toDF
    //注册表
    personDF.registerTempTable("person")
    //传入SQL
    val df = sqlContext.sql("select * from person order by age desc ")
    //将结果以JSON的方式存储到指定位置
    df.write.json(args(1))
    //停止Spark Context
    sc.stop()
  }
}
//case class一定要放到外面
case class Person(id: Int, name: String, age: Int)[/mw_shl_code]



看到上面例子中 sqlContext.sql可以将sql语句放入到函数中。
关于spark sql的更多内容推荐Spark Sql系统入门1:什么是spark sql及包含哪些组件
http://www.aboutyun.com/forum.php?mod=viewthread&tid=20910

Spark Sql系统入门2:spark sql精简总结
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21002


Spark Sql系统入门3:spark sql运行计划精简
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21032

about云日志分析项目准备6-5-2:spark应用程序中如何嵌入spark sql
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21078

来自:
spark零基础学习线路指导
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21959




回复

使用道具 举报

yangyixin 发表于 2017-7-6 16:01:41
本帖最后由 yangyixin 于 2017-7-6 16:03 编辑
w123aw 发表于 2017-7-6 15:48
其实可以和传统数据库类比。传统的sql可以是通过shell实现,也可以通过将sql嵌入代码中。
shell中使用sql ...

谢谢你,这个我之前有看到,就是在shell中实现的时候,是可以完全使用hive的函数吗,我查不到spark有没有专门的针对分位数的udf函数。

回复

使用道具 举报

w123aw 发表于 2017-7-6 16:05:53
yangyixin 发表于 2017-7-6 16:01
谢谢你,这个我之前有看到,就是在shell中实现的时候,是可以完全使用hive的函数吗,我查不到spark有没有 ...

不知道分位数是啥。如果没有的话,楼主可以自定义。
spark sql应该兼容hive sql的。推荐参考
Spark SQL UDF如何使用。步骤介绍
http://www.aboutyun.com/forum.php?mod=viewthread&tid=9336



回复

使用道具 举报

yuntian0215 发表于 2017-7-7 16:11:55
学习了,多多指教
回复

使用道具 举报

yangyixin 发表于 2017-7-8 21:50:33
官方文档中说 Note that the hive.metastore.warehouse.dir property in hive-site.xml is deprecated since Spark 2.0.0. Instead, use spark.sql.warehouse.dir to specify the default location of database in warehouse. You may need to grant write privilege to the user who starts the Spark application.

这个属性已经弃用了,,所以我配置一直不成功,,,还在摸索中,,,,求大神解救

<property>
                <name>hive.metastore.warehouse.dir</name>
                <value>hdfs://master:9000/user/hive/warehouse</value>
</property>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条