Spark SQL

为什么需要SQL?

SQL用于数据统计分析,关系型数据库存储的数量有限制。
云化: 关系型数据库 =》 Hadoop UDF支持原有关系型数据库内置的函数
简单易用,无门槛转行

支持sql的大数据框架:

  • Hive: MapReduce/Tez/Spark 原理:hive把SQL 转成了对应的底层作业,不用管转换过程
  • Presto:京东用的
  • Impala:为了解决hive交互式查询速度慢的问题,impala推荐的文件存储格式是parquet
  • Drill
  • phoenix

Spark SQL
是Spark的一个子模块,用来处理结构化数据

spark sql不是仅仅写sql

Spark SQL不仅仅是sql,还支持其他外部数据源。

特点:

  • 能够在spark中和sql查询无缝对接
  • 统一的数据访问,能够连接到统一的外部数据源,可以跨数据源做join
  • 能够访问已存在的Hive metastore,UDF
  • 能够通过JDBS访问Spark SQL

Spark SQL的使用
SparkSession:整个spark的入口点

整合hive:将 $HIVE_HOME/conf/hive-site.xml 拷贝到 $SPARK_HOME/conf/
报错:

19/05/04 00:51:22 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
19/05/04 00:51:22 WARN Utils: Your hostname, localhost resolves to a loopback address: 127.0.0.1; using 10.9.61.124 instead (on interface eth0)
19/05/04 00:51:22 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
19/05/04 00:51:25 WARN HiveMetaStore: Retrying creating default database after error: Error creating transactional connection factory

javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
	at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:587)
	at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.java:788)
	at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.java:333)
	at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.java:202)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at javax.jdo.JDOHelper$16.run(JDOHelper.java:1965)
	at java.security.AccessController.doPrivileged(Native Method)

Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
	at org.datanucleus.store.rdbms.connectionpool.AbstractConnectionPoolFactory.loadDriver(AbstractConnectionPoolFactory.java:58)
	at org.datanucleus.store.rdbms.connectionpool.BoneCPConnectionPoolFactory.createConnectionPool(BoneCPConnectionPoolFactory.java:54)
	at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.java:238)
	... 147 more

解决办法:缺少mysql的jar包

spark-shell --master local[2] --jars /home/hadoop/source/mysql-connector-java-5.1.27.jar

spark-sql 跟 spark-shell的用法相同

用spark的时候 什么时候需要启动hdfs,什么时候不需要?
用spark SQL的时候需要

测试 spark sql

spark.sql("show tables").show
spark.sql("select * from emp").show 

外部数据源
访问外面的数据,每一个spar应用程序都是以加载数据开始,以保存作业结束

  1. spark 1.x 支持jdbc/orc/parquet/csv/avro,文件可以存放在不同的文件系统之上,可以以不同的文件格式存储
  2. spark 2.x

DataFrame, DataSet, Rdd的区别
https://www.jianshu.com/p/c0181667daa0


val df = spark.read.json("file:///路径")  ⇒ 读取json文件 
df.printschema => 打印结构信息
df.select("字段名").show()

import spark.implicits._
df.select($"字段名")

df.filter(df("age")>20).show()

分割:
spark.sparkContext.textFile("").map(_.split("\\|").map(...))

排序:
student.sort($"name".desc,$"id".desc) 名字相同按id降序排

stu1.join(stu2, stu1("id") === stu2("id")).show(false)



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值