部分内容已更新,请见:https://editor.youkuaiyun.com/md/?articleId=108562743
1. 基本使用说明
Spark是一个计算框架,其最简单的对数据的处理方法是对DataFrame,虽然功能有限,但是对于非特大的数据量,也基本上够用了,故此处记录DataFrame的处理方法;
- 创建DataFrame的通用前提及方法;
- 创建SparkSession的实例;
- 由SparkSession的实例去创建DataFrame;
- 操作DataFrame的两种方式;
- 类pandas方法;
- 类SQL方法;
- 简单的性能优化;
- 写好脚本后,如何提交;
- 用spark-submit提交的方法;
2. 创建DataFrame的通用前提及方法
-
必须先创建SparkSession,再通过SparkSession来得到一个或多个DataFrame。主要原因如下:
- Spark是一个集群计算框架,其中需要用到通信,故使用通用的名称Session来代表含有DataFrame的应用程序。获取SparkSession的实例之后,才能过其拥有的方法来创建DataFrame,同时SparkSession也会通过创建各种Schedule来管理对DataFrame的操作;
-
创建SparkSession实例 的最简示例:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("app_name").getOrCreate()
-
SparkSession实例创建DataFrame 的示例:
- 从文件获取:
df = spark.read.format("csv").option("header", "true").schema(STRUCTED_TYPE).load("file://file_path")
- 从数据库获取:见下方示例;
-
特别说明**.schema(STRUCTED_TYPE)**:
- 因为SparkSession实例创建DataFrame时,并无法从数据源中获得DataFrame各列的数据类型,而在对DataFrame处理时必然需要类型,所以需要专门为DataFrame各列赋予类型,有以下两种方式:
.option("inferSchema", "true")
:Spark根据DataFrame的第一行数据来推断各列的数据类型,因为存在推断错误的可能,不推荐;.schema(STRUCTED_TYPE)
:要求人工先设定好各列的数据类型,且该类型是Spark的数据类型,再用.schema()
传入,具体数据类型见《spark权威指南》P58;
- 因为SparkSession实例创建DataFrame时,并无法从数据源中获得DataFrame各列的数据类型,而在对DataFrame处理时必然需要类型,所以需要专门为DataFrame各列赋予类型,有以下两种方式:
-
来源:
- http://spark.apache.org/docs/latest/api/python/index.html
2.1. Spark从数据库获取数据
- 要求先下载对应的