pyspark开发总结笔记

本文记录spark开发过程中遇到的小知识点,使用pyspark开发,由于使用大多数场景为DataFrame,介绍也多为DataFrame。本文比较长,在学习过程中摘了一些博客和资料,如果有描述的不对的地方请指出。

Spark是分布式内存计算,能够依据各类操作创建一个计算DAG图,数据通过DAG处理后生成结果。

对spark的数据操作分为两类,一类是转换(transformation)操作,比如Filter、map、flatMap、reduce等,但是这些操作是懒转换,只在action的时候才真正的对数据做处理;另一类是action为操作,比如collect、show、count、first等,它们能够触发数据的计算得到结果。

数据集分为RDD、DataFrame、DataSet,其中DataFrame可以看做带格式的RDD,(因为格式确定,所以处理计算效率高于RDD),对DataFrame的操作可以视为对一张数据表操作,由于数据集的不可变特性,不能够修改原有DataFrame,而只能创建新的DataFrame,如增加列生成新的DF,删减列生成新的DF等。由于对DataFrame类似于表,spark提供了SQL的方式进行计算和操作,很多计算可以直接通过SQL的方式解决掉。

注意,虽然PySpark中也叫DataFrame,但是其与Pandas的DataFrame的很多操作不一样,虽然有很多类似之处。

1. 常用的引入包

from pyspark.sql import Row
from pyspark.sql.functions import col, isnan, isnull
from pyspark.sql import SparkSession  # SparkConf、SparkContext 和 SQLContext 都已经被封装在 SparkSession
from pyspark.sql.types import *

2. 创建spark

# 创建spark 如果是pypsark的话,直接用内置的spark变量
spark = SparkSession.builder.appName('test pyspark').getOrCreate()

3. 创建DataFrame

# 通过读取数据集来创建DataFrame
# 1. 参考本文档读取操作

# 2. 通过RDD
client_rdd = spark.sparkContext.parallelize([
    ('20180701', '1111', 0.1),
    ('20180801', "1111", 0.2),
    ('20180901', "1111", 0.3),
])

client_schema = StructType([
    StructField("date", StringType(), True),
    StructField("client_id", StringType(), True),
    StructField("cash", DoubleType(), True)
])
client_df = spark.createDataFrame(client_rdd, client_schema)

4. Pandas与PySpark的DataFrame

# pandas DataFrame 与 pyspark的DataFrame相互转化
pandas_df = spark_df.toPandas()  # spark df转pandas df
spark_df = spark.createDataFrame(pandas_df.values.tolist(), list(pandas_df.columns))  # pandas df转spark df
spark_df = spark.createDataFrame(pandas_df)  # pandas df转spark df

5. DataFrame基础操作

5.1查看DataFrame

# 查看DataFrame
df.show(5, False)
df.first()
df.head(5)
df.take(5)
df.collect()  # 将df整体以list的形式返回,不要在大数据集的情况用这种方法
df.collectAsMap()  # ?
df.count()  # 统计df的行数
df.schema  # df的结构
df.printSchema()  # 树的形式打印df的结构
df.columns  # 查看列名

5.2缓存DataFrame

# 缓存df,对于多次调用一些小的数据集,如果不缓存,则在计算的时候会多次加载,缓存能提高效率
df.cache
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值