pyspark系列--pandas和pyspark对比

32 篇文章 1 订阅

目录

  1. pandas和pyspark对比
    1.1. 工作方式
    1.2. 延迟机制
    1.3. 内存缓存
    1.4. DataFrame可变性
    1.5. 创建
    1.6. index索引
    1.7. 行结构
    1.8. 列结构
    1.9. 列名称
    1.10. 列添加
    1.11. 列修改
    1.12. 显示
    1.13. 排序
    1.14. 选择或切片
    1.15. 过滤
    1.16. 整合
    1.17. 统计
    1.18. 合并
    1.19. 失数据处理
    1.20. SQL语句
    1.21. 两者互相转换
    1.22. 函数应用
    1.23. map-reduce操作
    1.24. diff操作
  2. pandas和pyspark对比
    1.1. 工作方式
    pandas
    单机single machine tool,没有并行机制parallelism,不支持Hadoop,处理大量数据有瓶颈
    pyspark
    分布式并行计算框架,内建并行机制parallelism,所有的数据和操作自动并行分布在各个集群结点上。以处理in-memory数据的方式处理distributed数据。支持Hadoop,能处理大量数据。
    1.2. 延迟机制
    pandas
    not lazy-evaluated
    pyspark
    lazy-evaluated
    1.3. 内存缓存
    pandas
    单机缓存
    pyspark
    persist() or cache()将转换的RDDs保存在内存
    1.4. DataFrame可变性
    pandas
    Pandas中DataFrame是可变的
    pyspark
    Spark中RDDs是不可变的,因此DataFrame也是不可变的
    1.5. 创建
    pandas
    从spark_df转换:pandas_df = spark_df.toPandas(),或读取其他数据
    pyspark
    从pandas_df转换:spark_df = SQLContext.createDataFrame(pandas_df)
    另外,createDataFrame支持从list转换spark_df,其中list元素可以为tuple,dict,rdd
    1.6. index索引
    pandas
    自动创建
    pyspark
    没有index索引,若需要则要额外创建该列
    1.7. 行结构
    pandas
    Series结构,属于Pandas DataFrame结构
    pyspark
    Row结构,属于Spark DataFrame结构
    1.8. 列结构
    pandas
    Series结构,属于Pandas DataFrame结构
    pyspark
    Column结构,属于Spark DataFrame结构,如:DataFrame[name: string]
    1.9. 列名称
    pandas
    不允许重名
    pyspark
    允许重名,修改列名采用alias方法
    1.10. 列添加
    pandas
    df[“xx”] = 0
    pyspark
    df.withColumn(“xx”, 0).show() 会报错
    from pyspark.sql import functions
    df.withColumn(“xx”, functions.lit(0)).show()
    1.11. 列修改
    pandas
    原来有df[“xx”]列,df[“xx”] = 1
    pyspark
    原来有df[“xx”]列,df.withColumn(“xx”, 1).show()
    1.12. 显示
    pandas
    df 输出具体内容
    pyspark
    df 不输出具体内容,输出具体内容用show方法.
    输出形式:DataFrame[age: bigint, name: string]
    以树的形式打印概要:df.printSchema()
    用df.collect(5)
    1.13. 排序
    pandas
    df.sort_index() 按轴进行排序
    df.sort() 在列中按值进行排序
    pyspark
    df.sort() 在列中按值进行排序
    1.14. 选择或切片
    pandas pyspark
    df.name 输出具体内容 df[] 不输出具体内容,输出具体内容用show方法。
    df[‘name’] 不输出具体内容,输出具体内容用show方法
    df[‘name’] 输出具体内容 df.select() 选择一列或多列.
    df.select(‘name’)
    切片 df.select(df[‘name’], df[‘age’]+1)
    df[0] ,df.ix[0] df.first()
    df.head(2) df.head(2), df.take(2)
    df.tail(2)
    切片 df.ix[:3]或者df.ix[:‘xx’]或者df[:‘xx’]
    df.loc[] 通过标签进行选择
    df.iloc[] 通过位置进行选择
    1.15. 过滤
    pandas
    df[df[‘age’]>21]
    pyspark
    df.filter(df[‘age’]>21) 或者 df.where(df[‘age’]>21)
    1.16. 整合
    pandas
    df.groupby(‘age’)
    df.groupby(‘A’).avg(‘B’)
    pyspark
    df.groupBy(‘age’)
    df.groupBy(‘A’).avg(‘B’).show() 应用单个函数
    from pyspark.sql import functions 导入内置函数库
    df.groupBy(‘A’).agg(functions.avg(‘B’), functions.min(‘B’), functions.max(‘B’)).show() 应用多个函数
    1.17. 统计
    pandas
    df.count() 输出每一列的非空行数
    df.describe() 描述某些列的count, mean, std, min, 25%, 50%, 75%, max
    pyspark
    df.count() 输出总行数
    df.describe() 描述某些列的count, mean, stddev, min, max
    1.18. 合并
    pandas
    Pandas下有concat方法,支持轴向合并
    Pandas下有merge方法,支持多列合并
    同名列自动添加后缀,对应键仅保留一份副本
    df.join() 支持多列合并
    df.append() 支持多行合并
    pyspark
    Spark下有join方法即df.join()
    同名列不自动添加后缀,只有键值完全匹配才保留一份副本
    1.19. 失数据处理
    pandas pyspark
    对缺失数据自动添加NaNs 不自动添加NaNs,且不抛出错误
    fillna函数:df.fillna() fillna函数:df.na.fill()
    dropna函数:df.dropna() dropna函数:df.na.drop()
    1.20. SQL语句
    pandas
    import sqlite3
    pd.read_sql(“SELECT name, age FROM people WHERE age >= 13 AND age <= 19”)
    pyspark
    1.表格注册:把DataFrame结构注册成SQL语句使用类型
    df.registerTempTable(‘people’) 或者 sqlContext.registerDataFrameAsTable(df, ‘people’)
    spark.sql(‘SELECT name, age FROM people WHERE age >= 13 AND age <= 19’)
    2.功能注册:把函数注册成SQL语句使用类型
    spark.registerFunction(‘stringLengthString’, lambda x: len(x))
    spark.sql(“SELECT stringLengthString(‘test’)”)
    1.21. 两者互相转换
    pandas_df = spark_df.toPandas()
    spark_df = spark.createDataFrame(pandas_df)

1.22. 函数应用
pandas
df.apply(f) 将df的每一列应用函数f
pyspark
df.foreach(f) 或者 df.rdd.foreach(f) 将df的每一列应用函数f
df.foreachPartition(f) 或者 df.rdd.foreachPartition(f) 将df的每一块应用函数f
1.23. map-reduce操作
pandas
map-reduce操作map(func, list),reduce(func, list) 返回类型seq
pyspark
df.map(func),df.reduce(func) 返回类型seqRDDs
1.24. diff操作
pandas
有diff操作,处理时间序列数据(Pandas会对比当前行与上一行)
pyspark
没有diff操作(Spark的上下行是相互独立,分布式存储的)


本文来自 振裕 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/suzyu12345/article/details/79673483?utm_source=copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值