当前位置: 首页 > news >正文

Spark 中数据读取方式详解:SparkSQL(DataFrame)与 SparkCore(RDD)方法对比及实践

在PySpark中,读取数据是数据处理流程的关键步骤。SparkCore(基于RDD)和SparkSQL(基于DataFrame)提供了不同的读取方式。下面我将以结构化的方式逐步解释这些方法,确保内容清晰易懂。所有代码示例均使用PySpark语法,并基于您提供的SparkSession创建模板(SparkSession.builder...getOrCreate())。以下内容分为两部分:SparkSQL读取方式(推荐,适用于结构化数据)和SparkCore读取方式(底层,适用于非结构化数据)。注意,实际应用中SparkSQL更常用,因为它优化了性能并提供丰富API。

1. SparkSQL读取数据方式(使用DataFrame API)

SparkSQL通过spark.read接口读取数据,支持多种数据源。核心方法是先创建SparkSession(如您示例所示),然后调用对应方法。参数包括数据源地址、类型和选项(通过option配置)。以下是常见场景的代码示例:

(1) 给定读取数据源的类型和地址,直接调用对应方法
  • 根据文件格式(如CSV、JSON、Parquet)直接调用方法,指定文件路径。
  • 示例:读取CSV文件
    from pyspark.sql import SparkSession# 创建SparkSession(参考您的模板)
    with SparkSession.builder.master("local[2]").appName("Demo").config("spark.sql.shuffle.partitions", 2).getOrCreate() as spark:# 直接调用csv方法,指定路径df_csv = spark.read.csv("path/to/file.csv")  # 基本读取df_csv.show()# 类似地,读取JSON文件
    with SparkSession.builder...getOrCreate() as spark:  # 省略重复代码df_json = spark.read.json("path/to/file.json")df_json.show()# 读取Parquet文件
    with SparkSession.builder...getOrCreate() as spark:df_parquet = spark.read.parquet("path/to/file.parquet")df_parquet.show()
    

(2) 使用option参数指定读取配置
  • option用于添加额外选项,如处理头信息、推断模式等。
  • 示例:读取CSV文件时启用头信息和模式推断
    with SparkSession.builder...getOrCreate() as spark:# 使用option设置header和inferSchemadf = spark.read.option("header", "true").option("inferSchema", "true").csv("path/to/file.csv")df.printSchema()  # 显示模式
    

  • 常用选项:
    • header:是否使用第一行作为列名(默认false)。
    • inferSchema:是否自动推断数据类型(默认false)。
    • delimiter:指定分隔符(如,)。
    • 多个选项可链式调用:.option("key1", "value1").option("key2", "value2")...
(3) 通过JDBC读取数据库数据
  • 使用spark.read.jdbc方法连接关系型数据库(如MySQL、PostgreSQL)。
  • 需提供JDBC URL、表名、连接属性(用户名、密码等)。
  • 示例:读取PostgreSQL数据库表
    with SparkSession.builder...getOrCreate() as spark:# JDBC连接参数jdbc_url = "jdbc:postgresql://localhost:5432/mydatabase"properties = {"user": "your_username","password": "your_password","driver": "org.postgresql.Driver"  # 需确保驱动在classpath}# 读取表数据df_jdbc = spark.read.jdbc(url=jdbc_url, table="tablename", properties=properties)df_jdbc.show()
    

(4) 读取Hive表数据
  • SparkSession默认支持Hive集成(需配置Hive元存储)。
  • 使用spark.read.table读取表,或直接执行SQL查询。
  • 示例:读取Hive表
    with SparkSession.builder...getOrCreate() as spark:# 方法1: 直接读取表df_hive = spark.read.table("database_name.table_name")  # 表名需完整df_hive.show()# 方法2: 使用SQL查询(更灵活)spark.sql("SELECT * FROM database_name.table_name").show()
    

2. SparkCore读取数据方式(使用RDD API)

SparkCore基于RDD(Resilient Distributed Dataset),适用于非结构化数据(如文本文件)。它通过SparkContext读取,但功能较基础,不直接支持选项或结构化查询。核心方法是textFile读取文本文件为RDD。

  • 创建SparkContext:在SparkSession中获取SparkContext
  • 读取文本文件:使用sc.textFile方法,指定文件路径。
  • 示例:读取文本文件为RDD
    from pyspark import SparkContext# 创建SparkSession(先获取SparkContext)
    with SparkSession.builder...getOrCreate() as spark:sc = spark.sparkContext  # 从SparkSession获取SparkContext# 读取文本文件rdd = sc.textFile("path/to/file.txt")  # 返回RDD[String]# 处理RDD(例如,打印前10行)print(rdd.take(10))
    

  • 注意:
    • RDD方式不支持option参数,所有解析需手动处理。
    • 对于结构化数据(如CSV),推荐先使用SparkSQL读取为DataFrame,再转换为RDD(df.rdd),以获得更好性能。

总结

  • SparkSQL(DataFrame API):首选方式,支持丰富数据源(文件、JDBC、Hive表)和option参数,适合结构化数据处理。代码简洁高效。
  • SparkCore(RDD API):底层方式,仅适合文本文件读取,功能有限,但灵活性强。
  • 最佳实践:优先使用SparkSQL,除非需要低级控制。在您的SparkSession模板基础上,结合数据源类型选择合适方法。确保路径和选项正确,以避免读取错误。如果您有具体场景(如文件格式或数据库类型),我可以提供更针对性的示例!
http://www.dtcms.com/a/564824.html

相关文章:

  • gta5线下买房网站建设公司logo是什么意思
  • Java面试场景题及答案总结(2025版持续更新)
  • Spring 异常处理机制:@ExceptionHandler、@ControllerAdvice
  • iTOP-RK3568OpenHarmony系统南向驱动开发手册
  • k8s-部署springboot容器化应用
  • Adobe Camera Raw 2026 全面解析:AI污点清除、雪景蒙版与变量调整深度评测
  • 网站制作平台能赚钱吗男女做羞羞的事视频网站
  • Intro.js 和 Driver.js
  • 水印攻击中(鲁棒性攻击、表达攻击、解释攻击)的区别,详细解释清楚
  • 14-循环神经网络(RNN):分析RNN在序列数据中的表现和特点
  • 深入浅出 Java 虚拟机之垃圾回收
  • 沧州市东光建设局 网站网站描述是什么
  • 从零开始MySQL-第4章 C[create]R[read]U[update]D[deletet]
  • Java版智慧场馆运营管理系统源码-全链路商品进销存精准管控方案
  • 电商销售数据分析实战:从数据挖掘到业务增长
  • 中文购物网站模板保存的密码变成乱码
  • 【开题答辩实录分享】以《宠物领养微信小程序》为例进行答辩实录分享
  • 【Block总结】MSC,多尺度稀疏交叉注意力网络在遥感场景分类中的应用|即插即用
  • CANN卷积算子深度优化:以ResNet推理为例
  • PINN求解一维亥姆霍兹方程,以声学问题为例,使用L-BFGS优化器,将传统物理建模与现代深度学习相结合,为解决科学计算问题提供了新的范式,MATLAB代码
  • 文件存储服务有哪些?他们优缺点分别是什么?FastDFS、MinIO、Ceph、HDFS、MooseFS、TFS、七牛云、阿里云 OSS
  • 如何一键将 PDF 转为 Word?
  • 20-递归神经网络(Recursive NN):介绍递归神经网络的特点和用途
  • STM32H743-ARM例程36-DNS
  • 搜集素材的网站吉首建设局网站
  • 16、Docker swarm-3
  • A模块 系统与网络安全 第四门课 弹性交换网络-4
  • Jenkins 在构建 Java 项目并操作 Docker 时 CPU 会突然飙高
  • IP冲突排查方法
  • 爱漫画-只做精品的韩漫网站企业首次建设网站方案流程