Spark数据来源
·
1、Spark Core 读取数据的方式
| 数据源类型 | 读取方法 / API | 说明 |
|---|---|---|
| 本地文件 / HDFS 文本文件 | sc.textFile("path") |
读取文本文件,每行作为一条记录;支持本地路径(file:///)或 HDFS 路径(hdfs:///),支持通配符(如 *.txt)。 |
| JSON 文件 | sc.textFile("path").map(json解析)(配合 json4s 等库) |
需手动解析 JSON 字符串,需引入第三方 JSON 解析库。 |
| SequenceFile(Hadoop 序列化文件) | sc.sequenceFile[K, V]("path") |
读取 Hadoop 序列文件,需指定键(K)和值(V)的类型。 |
| ObjectFile(Spark 序列化文件) | sc.objectFile[T]("path") |
读取 Spark 序列化的对象文件,需指定对象类型 T。 |
| 其他 Hadoop 输入格式 | sc.hadoopFile[K, V, InputFormat]("path") 或 sc.newAPIHadoopFile(...) |
适配 Hadoop 自定义 InputFormat,灵活支持特殊格式数据源。 |
2、Spark SQL 读取数据的方式
| 数据源类型 | 读取方法 / API | 说明 |
|---|---|---|
| CSV/TSV 等文本文件 | spark.read.option(...).csv("path") |
支持指定表头(header)、分隔符(sep)、数据类型推断(inferSchema)等参数。 |
| JSON 文件 | spark.read.json("path") |
自动解析 JSON 结构,支持单行或多行 JSON 格式。 |
| Parquet/ORC 列式存储 | spark.read.parquet("path") / spark.read.orc("path") |
高效读取列式存储文件(Spark SQL 默认格式),保留 schema 信息。 |
| Hive 表 | spark.table("db.table") 或 spark.sql("SELECT * FROM db.table") |
需集成 Hive,直接读取 Hive 元数据管理的表。 |
| 关系型数据库(JDBC) | spark.read.format("jdbc").option(...).load() |
通过 JDBC 连接 MySQL、PostgreSQL 等,需指定 URL、表名、账号密码等。 |
| Avro/Kafka 等其他数据源 | spark.read.format("avro").load("path") / spark.read.format("kafka").option(...).load() |
支持 Avro 格式文件、Kafka 流数据等,需指定对应格式。 |
3、Hive 中数据的来源
| 数据来源 | 导入方式 | 说明 |
|---|---|---|
| 本地文件系统 | LOAD DATA LOCAL INPATH 'local_path' INTO TABLE table_name |
数据从本地复制到 Hive 仓库目录(默认 /user/hive/warehouse)。 |
| HDFS | LOAD DATA INPATH 'hdfs_path' INTO TABLE table_name(内部表);CREATE EXTERNAL TABLE ... LOCATION 'hdfs_path'(外部表) |
内部表:数据从 HDFS 移动到仓库目录;外部表:直接关联 HDFS 路径,不移动数据。 |
| 其他 Hive 表 | INSERT INTO table_name SELECT ... FROM other_table |
通过 SQL 语句从现有表抽取、转换后插入新表(常用于 ETL 过程)。 |
| 关系型数据库 | 1. Sqoop 工具导入:sqoop import --connect jdbc:... --table ... --target-dir hdfs_path;2. Hive JDBC 关联 |
先通过 Sqoop 导入 HDFS 再加载到 Hive,或直接通过 JDBC 连接外部数据库。 |
| 流数据(实时数据) | Flink/Spark Streaming 写入 HDFS/Hive 表 | 流处理框架将实时数据写入 Hive 支持的存储格式(如 ORC/Parquet)。 |
| 云存储(S3/OSS 等) | 配置 Hive 兼容云存储文件系统,通过 LOAD DATA 或外部表关联 |
直接读取云存储中的数据,无需迁移到本地。 |
| 日志文件 | Flume 采集日志到 HDFS,再加载到 Hive 表 | 常用于用户行为日志、服务器日志等非结构化数据的分析。 |
更多推荐
所有评论(0)