注:本篇介绍基于scala(pyspark选择性参考)
scala-library(scala基础环境)
spark-sql(sparksql执行环境)
mysql(要访问mysql数据库的驱动包)
spark-hive(访问hive,配合方法 enableHiveSupport() 使用)
org.scala-lang
scala-library
2.11.11
org.apache.spark
spark-sql_2.11
2.3.3
mysql
mysql-connector-java
5.1.39
org.apache.spark
spark-hive_2.11
2.3.3
SparkSession创建
val spark = SparkSession
//获取构造器
.builder()
//设置程序名称
.appName(appName)
//设置运行模式 一般为yarn或者k8s,本地测试为 local 或 local[*]
.master(model)
//设置序列化方式
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
//开启动态分区
.config("hive.exec.dynamic.partition", value = true)
//配置动态分区模式
.config("hive.exec.dynamic.partition.mode", "nonstrict")
//开启笛卡尔积,一般不开启
.config("spark.sql.crossJoin.enabled", value = true)
//启用hive支持
.enableHiveSupport()
//创建spark
.getOrCreate()
基于数据源创建
Hive创建DataFrame
val frame = spark.sql(sql)
mysql创建DataFrame
val dataDF = spark.read
.format("jdbc")
//sqlserver驱动全类名
.option("driver", "com.mysql.jdbc.Driver")
//url信息
.option("url", dbUrl)
//传入sql语句
.option("dbtable", "(" + sql + ") as ms_temp_table")
//与户名设置
.option("user", username)
//密码设置
.option("password", pwd)
.load()
Json 创建DataFrame
val frame = spark.read.json("spark_sql/doc/student.json")
Parquet数组 创建DataFrame
// 这里需要parquet的文件
val frame = spark.read.parquet("spark_sql/doc/output")
CSV无文件 创建DataFrame
CSV有文件 创建DataFrame
基于RDD创建
使用方法将RDD转为DataFrame
使用隐士转换将RDD转为DataFrame
RDD种类
Case Class
Tuple
JavaBean
Row
set集合
val set1: Set[Int] = Set(1, 2, 3)
val set2: Set[Int] = Set(11, 21, 31)
val df1: RDD[Set[Int]] = spark.sparkContext.parallelize(List(set1, set2))
map集合
val map1: Map[String, String] = Map("key1" -> "value1")
val map2: Map[String, String] = Map("key2" -> "value2")
val rdd1: RDD[Map[String, String]] = spark.sparkContext.parallelize(List(map1, map2))
Array数组
val arr = Array(1, 2, 3, 4, 5)
val rdd21: RDD[Array[Int]] = spark.sparkContext.parallelize(List(arr))
Scala Class