Spark_07_外部数据源
外部数据源:
sparksql 加载外部数据源 形成一个 df
重点:
1.读数据 api
spark.read.format(“text”).load(paths : _) =》 df
spark.read.format(“json”).load(paths : _)
2.写数据 api
df.write.mode(SaveMode.Overwrite)format(“text”).save(path)
df.write.mode(SaveMode.Append)format(“json”).save(path)
1.text文件 :
本身是不带有schema信息 【字段 value string 】
text 比 json csv 带有的schema信息偏少
1.text文件加载进来之后 需要解析数据
2.写数据
Text data source supports only a single column, and you have 3 columns.
仅仅支持一列输出 不支持多列输出
使用sparksql 支持text多列输出?
1.自定义外部数据源 =》 难度
2.df 转变成rdd方式进行输出 =》 常用的手段
2.json:
hive处理json和sparksql(api,sql)处理json的区别
1.普通json
2.嵌套json:
1.api:
struct:打点
array:expolde + struct:打点
2.sql:
hive
struct:打点
array:expolde + struct:打点
3.不规范json =》udf函数来解决
数据输出:
数据写出方式:
1.覆盖 overwrite
2.追加 append
3.csv文件
excel=> spark-excel
1.可以使用excel打开
2.默认字段之间的分割符 , [可以进行更改]
常用参数:
read:
1.sep 分割符 ,
2.header 第一行作为table中的字段
3.inferSchema 类型推断功能
4.encoding 指定读取的csv文件的字符集 utf-8
write:
compression
sep
encoding
4.jdbc
1.目前这种写法 :加载数据 性能不高:
1.1直接表table 数据全部加载过来 , 再进行筛选 性能不高
**加载数据: 谓词下压: 首选!!!**
**手段:where 加载数据 性能高**
2.写数据:
1.table
CREATE TABLE rpt_zihang_sum
(
uid
varchar(20) DEFAULT NULL,
name
varchar(20) DEFAULT NULL,
sku
varchar(20) DEFAULT NULL,
os
varchar(20) DEFAULT NULL,
cnt
int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2.write
离线数仓:
sql
hive:
hive -e / -f xxx.sql
udf jar
sparksql:
1.code => jar api
2.spark-sql -e / -f xxx.sql
项目:
1.离线 数据同步
sqoop、datax、sparksql 自己开发的一个:
mysql hive
source
sink
1.工具 sync 功能
2.数据分析平台
sql:
load jdbc.mysql "select * from db.table where "
后端:60%
sparksql、zookeeper、akka、自定义外部数据源、自定义sql antlr 【sql框架】 +
前端: 100%
springboot
kafka hadoop flink clickhouse hudi 重点是业务!!!