支持的数据源类型
Spark SQL 内置支持丰富的数据格式和外部系统,核心数据源包括:
列式存储 :Parquet(默认格式)、ORC
文本格式 :JSON、CSV、TXT
关系数据库 :通过 JDBC 连接 MySQL、PostgreSQL 等
大数据生态 :Hive 表、HDFS 文件
其他来源 :Avro、XML(通常需要额外库)
每种数据源在性能上有显著差异,例如 Parquet 采用列式存储,在分析型查询中性能最优。
例子:
java
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
public class a_SparkSql_Env {
public static void main(String[] args) {
SparkSession sparkSession = SparkSession.builder().master("local").appName("sparksql").getOrCreate();
Dataset<Row> json = sparkSession.read().option("spark.sql.adaptive.enabled",true).json("input/user.json");
json.createOrReplaceTempView("user");
json.select("age").show();
// String sql = "select age from user";
// Dataset<Row> df = sparkSession.sql(sql);
// df.show();
sparkSession.close();
}
}
更多例子参见官网:spark sql数据源
配置优化策略:
并行度调整 :设置 spark.sql.shuffle.partitions 优化 shuffle 性能
内存缓存 :对频繁访问的表使用 spark.catalog.cacheTable() 或 dataFrame.cache()
数据源特定优化:如 Parquet 的谓词下推、ORC 的索引使用
读取性能调优技巧:
启用 spark.sql.adaptive.enabled=true 实现自适应查询执行
设置 spark.sql.files.maxPartitionBytes 控制分区大小
使用 spark.sql.autoBroadcastJoinThreshold 优化小表广播