目录
基本概念
- DataFrame 是一个由 Row 对象组成的 RDD,附带包含每列数据类型的结构信息
- 具有分布式、不可变、惰性计算等特性
- 不可变:修改DataFrame只能通过转换操作生成新的DataFrame
- spark的DataFrame,也是使用pyspark的做数据处理的基操
- sparkSQL,sparkDataset和sparkDataFrame关系
- 可以把DataFrame注册成表,然后用写SQL计算,只是sparkSQL返回的也是sparkDataFrame
- sparkDataFrame是Dataset(row), Dataset本身每行数据可以是其它类型
基本语法
初始化spark环境
创建spark的上下文环境, 然后就可以调用不同的函数进行操作
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
进行一些基础配置的环境创建
spark = SparkSession\
.builder\
.appName(app_name) \
.config("spark.master", "yarn") \
.config('spark.driver.memory', '8g')\
.config("spark.executor.instances", 60) \
.config('spark.executor.cores', 4)\
.config('spark.executor.memory', '8g')\
.getOrCreate()
- spark.driver.memory:driver端内存
- spark.executor.instances:executor数量
- spark.executor.cores:每个executor的进程数
- spark.executor.memory:每个executor的内存
一般上面4个参数就可以控制整个程序的资源大小
自定义python环境
有些executer可能python环境不一致,或者某些包也没有安装,需要在整个任务统一python环境。
# 1. 打包本地python环境
tar -zcvf py36.tar.gz /home/worker/envs/py36
# 2. 上传hdfs
hadoop fs -put py36.tar.gz hdfs://path1/path2/pyenv/
# 3. spark初始化指定环境
spark = SparkSession\
.builder\
.appName(app_name) \
.config('spark.driver.memory', '8g')\
.config('spark.executor.cores', 4)\
.config('spark.executor.memory', '8g')\
.config("spark.yarn.dist.archives", "hdfs://path1/path2/pyenv/py36.tar.gz#python3env")\
.config("spark.pyspark.python", "./python3env/py36/bin/python")\
.getOrCreate()
常用语法
记录一些常用语法
DataFrame操作
create dataframe
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
import pyspark.sql.types as T
from pyspark.sql.functions import udf
rdd = spark.sparkContext.parallelize([
(1, 2., 'sdsd|sdsd:sdsd', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(1, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(2, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(2, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(2, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(2, 3., '20202_19001', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(3, 4., '', date(2000, 3, 1), datetime(2000, 1

最低0.47元/天 解锁文章
844

被折叠的 条评论
为什么被折叠?



