Spark基本使用-DataFrame

本文介绍了Spark DataFrame的基本使用,包括创建、从数据库读取和写入数据,以及操作DataFrame的类pandas和类SQL方法。同时,文章讨论了性能优化技巧,如语言选择、调度设置、分区和缓存策略,并提供了spark-submit提交任务的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部分内容已更新,请见:https://editor.youkuaiyun.com/md/?articleId=108562743

1. 基本使用说明

Spark是一个计算框架,其最简单的对数据的处理方法是对DataFrame,虽然功能有限,但是对于非特大的数据量,也基本上够用了,故此处记录DataFrame的处理方法;

  1. 创建DataFrame的通用前提及方法;
    1. 创建SparkSession的实例;
    2. 由SparkSession的实例去创建DataFrame;
  2. 操作DataFrame的两种方式;
    1. 类pandas方法;
    2. 类SQL方法;
  3. 简单的性能优化;
  4. 写好脚本后,如何提交;
    1. 用spark-submit提交的方法;

2. 创建DataFrame的通用前提及方法

  1. 必须先创建SparkSession,再通过SparkSession来得到一个或多个DataFrame。主要原因如下:

    1. Spark是一个集群计算框架,其中需要用到通信,故使用通用的名称Session来代表含有DataFrame的应用程序。获取SparkSession的实例之后,才能过其拥有的方法来创建DataFrame,同时SparkSession也会通过创建各种Schedule来管理对DataFrame的操作;
  2. 创建SparkSession实例 的最简示例:

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName("app_name").getOrCreate()
    
  3. SparkSession实例创建DataFrame 的示例:

    1. 从文件获取:
    df = spark.read.format("csv").option("header", "true").schema(STRUCTED_TYPE).load("file://file_path")
    
    1. 从数据库获取:见下方示例
  4. 特别说明**.schema(STRUCTED_TYPE)**:

    1. 因为SparkSession实例创建DataFrame时,并无法从数据源中获得DataFrame各列的数据类型,而在对DataFrame处理时必然需要类型,所以需要专门为DataFrame各列赋予类型,有以下两种方式:
      1. .option("inferSchema", "true"):Spark根据DataFrame的第一行数据来推断各列的数据类型,因为存在推断错误的可能,不推荐;
      2. .schema(STRUCTED_TYPE):要求人工先设定好各列的数据类型,且该类型是Spark的数据类型,再用.schema()传入,具体数据类型见《spark权威指南》P58;
  5. 来源:

    1. http://spark.apache.org/docs/latest/api/python/index.html

2.1. Spark从数据库获取数据

  1. 要求先下载对应的
### Spark 3.1.3 DataFrame 使用教程 #### 创建DataFrame 创建DataFrame可以通过读取文件或现有RDD来完成。对于大多数情况,推荐使用`spark.read`接口加载数据集。 ```python from pyspark.sql import SparkSession # 初始化Spark会话 spark = SparkSession.builder \ .appName("DataFrame Example") \ .getOrCreate() # 加载CSV文件到DataFrame df = spark.read.csv("/path/to/csv", header=True, inferSchema=True) # 显示前几行数据 df.show() ``` #### 基本操作 一旦有了DataFrame对象之后,就可以对其进行各种变换和动作操作。常见的有选择特定列、过滤行以及添加新计算字段等。 ```python # 选取单个或多个列 selected_columns_df = df.select('column_name') # 过滤条件 filtered_df = df.filter(df['age'] > 20) # 添加一列基于已有列的新计算结果 new_column_added_df = df.withColumn('double_age', df['age']*2) ``` #### 聚合函数 支持多种内置聚合函数来进行统计分析工作,比如计数(count),求平均(mean),最大最小值(max/min)等等。 ```python # 计算年龄的最大值、最小值及均值 aggregated_stats_df = df.describe(['age']) # 对某列进行分组并汇总其他列的信息 grouped_by_gender_df = df.groupBy('gender').agg({'salary': 'mean'}) ``` #### Join操作 当需要连接两个表时,可以利用join方法实现内联接(inner join), 外联接(full outer join)等形式的数据关联查询。 ```python # 执行两表之间的左外连接 joined_df = table_a.join(table_b, on='id', how='left_outer') ``` #### 数据写入 最后还可以把处理后的DataFrame保存回存储系统中去,如HDFS,HBase,RDBMS等。 ```python # 将DataFrame写出为Parquet格式文件 df.write.parquet('/output/path/') ``` [^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值