第7章 External Data Source

7-1 -课程目录

 

7-2 -产生背景

用户:

方便快速从不同的数据源(json,parquet,rebms),经过混合处理(Json,join,parquet),再将处理结果以特定的格式(json,parquet)再写回到指定的(HDFS,s3)上去

Spark SQL1.2==>外部数据源API

7-3 -概述

没有本次课

7-4 -目标

外部数据源的目的

1)开发人员:是否需要把代码合并到spark中???weibo

2)用户

spark.read.format(format)

format

build-in: json parquet jdbc | csv(2+)

packages:外部的 并不是spark内置

https://spark-packages.org/

写:people.write.format("parquet").save("path")

7-5 -操作Parquet文件数据

import org.apache.spark.sql.SparkSession

/**

* Parquet文件操作

*/

object ParquetApp {

def main(args: Array[String]) {

val spark = SparkSession.builder().appName("SparkSessionApp")

.master("local[2]").getOrCreate()

/**

* spark.read.format("parquet").load 这是标准写法

*/

val userDF = spark.read.format("parquet").load("file:///home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/users.parquet")

userDF.printSchema()

userDF.show()

userDF.select("name","favorite_color").show

userDF.select("name","favorite_color").write.format("json").save("file:///home/hadoop/tmp/jsonout")

spark.read.load("file:///home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/users.parquet").show

//会报错,因为sparksql默认处理的format就是parquet

spark.read.load("file:///home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/people.json").show

spark.read.format("parquet").option("path","file:///home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/users.parquet").load().show

spark.stop()

}

}

7-6 -操作Hive表数据

7-7 -操作MySQL表数据

7-8 -Hive和MySQL综合使用

源代码地址:

https://gitee.com/sag888/big_data/blob/master/%E4%BB%A5%E6%85%95%E8%AF%BE%E7%BD%91%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90%E4%B8%BA%E4%BE%8B%20%E8%BF%9B%E5%85%A5%E5%A4%A7%E6%95%B0%E6%8D%AE%20Spark%20SQL%20%E7%9A%84%E4%B8%96%E7%95%8C/project/p1867y/ImoocSparkSQLProject/src/main/scala/com/imooc/spark/HiveMySQLApp.scala

源代码:

package com.imooc.spark

import org.apache.spark.sql.SparkSession

/**

* 使用外部数据源综合查询Hive和MySQL的表数据

*/

object HiveMySQLApp {

def main(args: Array[String]) {

val spark = SparkSession.builder().appName("HiveMySQLApp")

.master("local[2]").getOrCreate()

// 加载Hive表数据

val hiveDF = spark.table("emp")

// 加载MySQL表数据

val mysqlDF = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306").option("dbtable", "spark.DEPT").option("user", "root").option("password", "root").option("driver", "com.mysql.jdbc.Driver").load()

// JOIN

val resultDF = hiveDF.join(mysqlDF, hiveDF.col("deptno") === mysqlDF.col("DEPTNO"))

resultDF.show

resultDF.select(hiveDF.col("empno"),hiveDF.col("ename"),

mysqlDF.col("deptno"), mysqlDF.col("dname")).show

spark.stop()

}

}

猜你喜欢

转载自blog.csdn.net/weixin_38492276/article/details/81628863