1. 连接mysql

首先需要把mysql-connector-java-5.1.39.jar 拷贝到 spark 的jars目录里面;

scala> import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.SQLContext

scala> val sqlContext=new SQLContext(sc)
warning: there was one deprecation warning; re-run with -deprecation for details
sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@3a649f9a

scala>  sqlContext.read.format("jdbc").options(Map("url" -> "jdbc:mysql://localhost:3306/metastore",
     |  "driver" -> "com.mysql.jdbc.Driver", "dbtable" -> "DBS", "user" -> "root", "password" -> "root")).load().show
+-----+--------------------+--------------------+-------+----------+----------+
|DB_ID|                DESC|     DB_LOCATION_URI|   NAME|OWNER_NAME|OWNER_TYPE|
+-----+--------------------+--------------------+-------+----------+----------+
|    1|Default Hive data...|hdfs://localhost:...|default|    public|      ROLE|
|    2|                null|hdfs://localhost:...|    aaa|      root|      USER|
|    6|                null|hdfs://localhost:...| userdb|      root|      USER|
+-----+--------------------+--------------------+-------+----------+----------+

-----------------------------------------------------------------------------------------------------------------

scala> import org.apache.spark.sql.{SQLContext,SparkSession}

import org.apache.spark.sql.{SQLContext, SparkSession}

scala> val url="jdbc:mysql://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=UTF-8"
url: String = jdbc:mysql://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=UTF-8

scala> val con = new SQLContext(sc);

warning: there was one deprecation warning; re-run with -deprecation for details

con: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@3a973b5e

scala> con.read.format("jdbc").options(Map("url"->url,"dbtable"->"role")).load.show
+------+----+-------------------+-------------------+---+-----+
|roleid|name|             dateid|               addr|sex|level|
+------+----+-------------------+-------------------+---+-----+
|     1|null|2017-11-16 14:49:11|henan luohe linying|  1|   10|
|    40|null|2017-11-13 14:50:25| guangdong shenzhen|  1|   20|
|   110|null|2017-11-14 14:50:47|            beijing|  1|   20|
|   200|null|2017-11-14 14:49:47|   shandong qingdao|  0|    8|
|   400|null|2017-11-15 14:49:56|        anhui hefei|  0|    4|
|   600|null|2017-11-15 14:50:05|     hunan changsha|  0|   91|
|   650|null|2017-11-01 17:24:34|               null|  1|   29|
|   651|wang|2018-06-06 16:16:55|           shenzhen|  1|   60|
+------+----+-------------------+-------------------+---+-----+

scala> con.read.format("jdbc").option("url",url).option("dbtable","role").load.show
+------+----+-------------------+-------------------+---+-----+
|roleid|name|             dateid|               addr|sex|level|
+------+----+-------------------+-------------------+---+-----+
|     1|null|2017-11-16 14:49:11|henan luohe linying|  1|   10|
|    40|null|2017-11-13 14:50:25| guangdong shenzhen|  1|   20|
|   110|null|2017-11-14 14:50:47|            beijing|  1|   20|
|   200|null|2017-11-14 14:49:47|   shandong qingdao|  0|    8|
|   400|null|2017-11-15 14:49:56|        anhui hefei|  0|    4|
|   600|null|2017-11-15 14:50:05|     hunan changsha|  0|   91|
|   650|null|2017-11-01 17:24:34|               null|  1|   29|
|   651|wang|2018-06-06 16:16:55|           shenzhen|  1|   60|
+------+----+-------------------+-------------------+---+-----+

scala> val session=SparkSession.builder.getOrCreate()
session: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@71e393a2

scala> session.read.format("jdbc").options(Map("url"->url,"dbtable"->"role")).load.show
+------+----+-------------------+-------------------+---+-----+
|roleid|name|             dateid|               addr|sex|level|
+------+----+-------------------+-------------------+---+-----+
|     1|null|2017-11-16 14:49:11|henan luohe linying|  1|   10|
|    40|null|2017-11-13 14:50:25| guangdong shenzhen|  1|   20|
|   110|null|2017-11-14 14:50:47|            beijing|  1|   20|
|   200|null|2017-11-14 14:49:47|   shandong qingdao|  0|    8|
|   400|null|2017-11-15 14:49:56|        anhui hefei|  0|    4|
|   600|null|2017-11-15 14:50:05|     hunan changsha|  0|   91|
|   650|null|2017-11-01 17:24:34|               null|  1|   29|
|   651|wang|2018-06-06 16:16:55|           shenzhen|  1|   60|
+------+----+-------------------+-------------------+---+-----+

scala> session.read.format("jdbc").option("url",url).option("dbtable","role").load.show
+------+----+-------------------+-------------------+---+-----+
|roleid|name|             dateid|               addr|sex|level|
+------+----+-------------------+-------------------+---+-----+
|     1|null|2017-11-16 14:49:11|henan luohe linying|  1|   10|
|    40|null|2017-11-13 14:50:25| guangdong shenzhen|  1|   20|
|   110|null|2017-11-14 14:50:47|            beijing|  1|   20|
|   200|null|2017-11-14 14:49:47|   shandong qingdao|  0|    8|
|   400|null|2017-11-15 14:49:56|        anhui hefei|  0|    4|
|   600|null|2017-11-15 14:50:05|     hunan changsha|  0|   91|
|   650|null|2017-11-01 17:24:34|               null|  1|   29|
|   651|wang|2018-06-06 16:16:55|           shenzhen|  1|   60|
+------+----+-------------------+-------------------+---+-----+

scala> import java.util.Properties

import java.util.Properties

scala> val pro=new Properties()

pro: java.util.Properties = {}

scala> session.read.jdbc(url,"role",pro).show
+------+----+-------------------+-------------------+---+-----+
|roleid|name|             dateid|               addr|sex|level|
+------+----+-------------------+-------------------+---+-----+
|     1|null|2017-11-16 14:49:11|henan luohe linying|  1|   10|
|    40|null|2017-11-13 14:50:25| guangdong shenzhen|  1|   20|
|   110|null|2017-11-14 14:50:47|            beijing|  1|   20|
|   200|null|2017-11-14 14:49:47|   shandong qingdao|  0|    8|
|   400|null|2017-11-15 14:49:56|        anhui hefei|  0|    4|
|   600|null|2017-11-15 14:50:05|     hunan changsha|  0|   91|
|   650|null|2017-11-01 17:24:34|               null|  1|   29|
|   651|wang|2018-06-06 16:16:55|           shenzhen|  1|   60|
+------+----+-------------------+-------------------+---+-----+

2.连接hive,首先需要将hive的配置文件hive-site.xml拷贝到spark的conf目录下或者在conf目录下新建hive-site.xml,添加以下内容

(由于从hive拷贝过来的文件报错,因此本人采用了新建文件的方式)

<configuration>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>root</value>
</property>
 <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/tmp/hive/log</value>
</property>
</configuration>

启动 spark-shell:

HiveContext读取hive

scala> import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.HiveContext

scala> val hivecon=new HiveContext(sc)
warning: there was one deprecation warning; re-run with -deprecation for details
hivecon: org.apache.spark.sql.hive.HiveContext = org.apache.spark.sql.hive.HiveContext@1b96f15e

scala> hivecon.sql("show databases").show
+------------+
|databaseName|
+------------+
|         aaa|
|     default|
|   sparkhive|
|      userdb|
+------------+

--------------------------------------------

--SparkSession读取hive

scala> import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.SparkSession

scala> val session=SparkSession.builder.getOrCreate()

session: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@331d651b

scala> session.sql("select sex,count(1) from gamedw.cust group by sex").show
+---+--------+
|sex|count(1)|
+---+--------+
|  1|       6|
|  0|       3|
+---+--------+

spark sql 中的结构化数据的更多相关文章

  1. [转] Protobuf高效结构化数据存储格式

    从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0. 一.Protobuf? 1. 是什么?  Goo ...

  2. Spark SQL - 对大规模的结构化数据进行批处理和流式处理

    Spark SQL - 对大规模的结构化数据进行批处理和流式处理 大体翻译自:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/con ...

  3. Spark如何与深度学习框架协作,处理非结构化数据

    随着大数据和AI业务的不断融合,大数据分析和处理过程中,通过深度学习技术对非结构化数据(如图片.音频.文本)进行大数据处理的业务场景越来越多.本文会介绍Spark如何与深度学习框架进行协同工作,在大数 ...

  4. Spark读取结构化数据

    读取结构化数据 Spark可以从本地CSV,HDFS以及Hive读取结构化数据,直接解析为DataFrame,进行后续分析. 读取本地CSV 需要指定一些选项,比如留header,比如指定delimi ...

  5. 详解Google-ProtoBuf中结构化数据的编码

    本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf.因此,本文首先会介绍一些google ...

  6. H5中使用Web Storage来存储结构化数据

    在上一篇对Web Storage的介绍中,可以看到,使用Storage保存key—value对时,key.value只能是字符串,这对于简单的数据来说已经够了,但是如果需要保存更复杂的数据,比如保存类 ...

  7. MySQL 5.7:非结构化数据存储的新选择

    本文转载自:http://www.innomysql.net/article/23959.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 工作10余年,没有一个版本能像MySQL ...

  8. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  9. Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)

    一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...

随机推荐

  1. solr Query[转]

    一. Query参数 1. CoreQueryParam查询的参数 1) q: 查询字符串,必须的. 2) q.op: 覆盖schema.xml的defaultOperator(有空格时用" ...

  2. what's the difference between grouping and facet in lucene 3.5

    I  found in lucene 3.5 contrib folder two plugins: one is grouping, the other is facet. In my option ...

  3. Jmeter(二十一)Jmeter常见问题及场景应用

    Jmeter作为工具来讲,已经是一个相对比较牛掰的工具,除了它能够支持那么多协议以及方法之外,更在与它的前置处理以及后置处理.同步监控的人性化.当然,所有的工具.框架都是作为业务的支撑,如果不能满足我 ...

  4. MybatisUtil的使用,便于产生SqlSession

    简化代码,实现一个静态的工具类来实现获取SqlSession 主要有getSqlSessionFactory()和getSqlSession() public class MybatisUtil { ...

  5. elasticsearch 外网访问9200端口访问

    可以访问127.0.0.1:9200,但不能访问 公网IP:9200 后面ip就是127.0.0.1的局域网ip,如何解决? 修改配置文件 config/elasticsearch.yml netwo ...

  6. 使用Dotfuscator混淆你的.net程序

    简介 众所周知C#等net框架的程序是无法防止反编译的,但可以通过混淆,让反编译出来的代码非常难看. Dotfuscator是微软推荐使用的第三方混淆器,用来保护你的net程序.可以在安装VS的时候顺 ...

  7. 关于New,delete

    new delete 为表达式.这个过程不能重载,但是分解的步骤可以重载. String* ps = newe String("Hello") 分解为: String* ps; v ...

  8. 09 shell脚本程序练习

    练习1:写一个脚本程序,完成以下任务 1.添加五个用户,user1.user2.user3.user4.user5: 2.添加之前先判断是否存在该用户,如果存在则显示“某某用户已存在”: 3.每个用户 ...

  9. WebView长按保存图片;WebView不跳转到系统的浏览器;WebView加载显示进度条;WebView返回事件处理;

    直接看代码即可,代码里面注释写的很清楚,这个类拉下来就能用: 写法和命名比较粗暴,但也简单易懂: public class MainActivity extends AppCompatActivity ...

  10. Echarts动态加载柱状图和折线图混合展示的实例

    一.引入echarts文件: <script type="text/javascript" src="echarts.js"></script ...