Pandas Spark
工作方式 单机single machine tool,没有并行机制parallelism
不支持Hadoop,处理大量数据有瓶颈
分布式并行计算框架,内建并行机制parallelism,所有的数据和操作自动并行分布在各个集群结点上。以处理in-memory数据的方式处理distributed数据。
支持Hadoop,能处理大量数据
延迟机制 not lazy-evaluated lazy-evaluated
内存缓存 单机缓存 persist() or cache()将转换的RDDs保存在内存
DataFrame可变性 Pandas中DataFrame是可变的 Spark中RDDs是不可变的,因此DataFrame也是不可变的
创建 从spark_df转换:pandas_df = spark_df.toPandas() 从pandas_df转换:spark_df = SQLContext.createDataFrame(pandas_df)
另外,createDataFrame支持从list转换spark_df,其中list元素可以为tuple,dict,rdd
list,dict,ndarray转换 已有的RDDs转换
CSV数据集读取 结构化数据文件读取
HDF5读取 JSON数据集读取
EXCEL读取 Hive表读取
  外部数据库读取
index索引 自动创建 没有index索引,若需要需要额外创建该列
行结构 Series结构,属于Pandas DataFrame结构 Row结构,属于Spark DataFrame结构
列结构 Series结构,属于Pandas DataFrame结构 Column结构,属于Spark DataFrame结构,如:DataFrame[name: string]
列名称 不允许重名 允许重名
修改列名采用alias方法
列添加 df[“xx”] = 0 df.withColumn(“xx”, 0).show() 会报错
from pyspark.sql import functions
df.withColumn(“xx”, functions.lit(0)).show()
列修改 原来有df[“xx”]列,df[“xx”] = 1 原来有df[“xx”]列,df.withColumn(“xx”, 1).show()
显示   df 不输出具体内容,输出具体内容用show方法
输出形式:DataFrame[age: bigint, name: string]
df 输出具体内容 df.show() 输出具体内容
没有树结构输出形式 以树的形式打印概要:df.printSchema()
  df.collect()
排序 df.sort_index() 按轴进行排序  
df.sort() 在列中按值进行排序 df.sort() 在列中按值进行排序
选择或切片 df.name 输出具体内容 df[] 不输出具体内容,输出具体内容用show方法
df[“name”] 不输出具体内容,输出具体内容用show方法
df[] 输出具体内容,
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[] 通过位置进行选择  
过滤 df[df[‘age’]>21] df.filter(df[‘age’]>21) 或者 df.where(df[‘age’]>21)
整合 df.groupby(“age”)
df.groupby(“A”).avg(“B”)
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() 应用多个函数
统计 df.count() 输出每一列的非空行数 df.count() 输出总行数
df.describe() 描述某些列的count, mean, std, min, 25%, 50%, 75%, max df.describe() 描述某些列的count, mean, stddev, min, max
合并 Pandas下有concat方法,支持轴向合并  
Pandas下有merge方法,支持多列合并
同名列自动添加后缀,对应键仅保留一份副本
Spark下有join方法即df.join()
同名列不自动添加后缀,只有键值完全匹配才保留一份副本
df.join() 支持多列合并  
df.append() 支持多行合并  
缺失数据处理 对缺失数据自动添加NaNs 不自动添加NaNs,且不抛出错误
fillna函数:df.fillna() fillna函数:df.na.fill()
dropna函数:df.dropna() dropna函数:df.na.drop()
SQL语句 import sqlite3
pd.read_sql(“SELECT name, age FROM people WHERE age >= 13 AND age <= 19”)
表格注册:把DataFrame结构注册成SQL语句使用类型
df.registerTempTable(“people”) 或者 sqlContext.registerDataFrameAsTable(df, “people”)
sqlContext.sql(“SELECT name, age FROM people WHERE age >= 13 AND age <= 19”)
功能注册:把函数注册成SQL语句使用类型
sqlContext.registerFunction(“stringLengthString”, lambda x: len(x))
sqlContext.sql(“SELECT stringLengthString(‘test’)”)
两者互相转换 pandas_df = spark_df.toPandas() spark_df = sqlContext.createDataFrame(pandas_df)
函数应用 df.apply(f)将df的每一列应用函数f df.foreach(f) 或者 df.rdd.foreach(f) 将df的每一列应用函数f
df.foreachPartition(f) 或者 df.rdd.foreachPartition(f) 将df的每一块应用函数f
map-reduce操作 map(func, list),reduce(func, list) 返回类型seq df.map(func),df.reduce(func) 返回类型seqRDDs
diff操作 有diff操作,处理时间序列数据(Pandas会对比当前行与上一行) 没有diff操作(Spark的上下行是相互独立,分布式存储的)

转载请注明:宁哥的小站 » Spark与Pandas中DataFrame对比(详细)

Spark与Pandas中DataFrame对比的更多相关文章

  1. Spark与Pandas中DataFrame对比(详细)

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

  2. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

  3. pandas中DataFrame的ix,loc,iloc索引方式的异同

    pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...

  4. pandas中DataFrame对象to_csv()方法中的encoding参数

    当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...

  5. pandas中DataFrame和Series的数据去重

    在SQL语言中去重是一件相当简单的事情,面对一个表(也可以称之为DataFrame)我们对数据进行去重只需要GROUP BY 就好. select custId,applyNo from tmp.on ...

  6. pandas中DataFrame重置设置索引

    在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as n ...

  7. Python基础 | pandas中dataframe的整合与形变(merge & reshape)

    目录 行的union pd.concat df.append 列的join pd.concat pd.merge df.join 行列转置 pivot stack & unstack melt ...

  8. pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)

    数据介绍 先随机生成一组数据: import pandas as pd import numpy as np state = ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'N ...

  9. pandas中DataFrame使用

    切片选择 #显示第一行数据print(df.head(1)) #显示倒数三行数据 print(df.tail(3)) loc  df.loc[row_index,col_index]  注意loc是根 ...

随机推荐

  1. windows CMD命令查看局域网内所有主机名及IP

    COLOR 0A CLS @ECHOOff Title查询局域网内在线电脑IP :send @ECHO off&setlocal enabledelayedexpansion ECHO 正在获 ...

  2. 深入剖析Android音频之AudioTrack

    播放声音能够用MediaPlayer和AudioTrack,两者都提供了java API供应用开发人员使用.尽管都能够播放声音.但两者还是有非常大的差别的.当中最大的差别是MediaPlayer能够播 ...

  3. #lspci | grep Eth

    该命令作用:将lspci的输出当做输入,从中找出包含Eth的行.在我的Fedora机器上运行结果为 [root@localhost etc]# lspci | grep Eth00:04.0 Ethe ...

  4. project开发的程序设计与逻辑设计

    非常多时候我们要做庞大project, 就像一棵大树, 方方面面都有自己的细枝末节,而作为开发员的我们,无法时时刻刻去保持对程序的全面认知,所以我们要把程序设计与逻辑设计区分开来. 那么什么是程序设计 ...

  5. 日媒:阿里巴巴上市融资或超Facebook

    <日本经济新闻>4月22日报导称, 越来越多观念以为,正准备在美国股票商场上市的阿里巴巴集团的融资额将超越美国Facebook.假如完毕,作为互联网公司将创出融资额的历史新高.阿里巴巴现已 ...

  6. Linux/Unix分配进程ID的方法以及源代码实现

    在Linux/Unix系统中.每一个进程都有一个非负整型表示的唯一进程ID.尽管是唯一的.可是进程的ID能够重用.当一个进程终止后,其进程ID就能够再次使用了. 大多数Linux/Unix系统採用延迟 ...

  7. fis3 scss 版本报错

    fis3 scss编译需要安装的node版本为4.x,node版本高了fis会报错.如下图所示:

  8. Unity 添加自定义菜单(插件),添加功能

    网上介绍如何写这种插件的文章很多...但是对于新手来说,最基本的,怎么运行这个插件,都不知道...网上的文章都懒得说这个...   幸好,看了半天官方网站别的资料,突然就发现办法了...   这个不是 ...

  9. C#编写Windows服务程序 (服务端),client使用 消息队列 实现淘宝 订单全链路效果

    需求: 针对 淘宝提出的 订单全链路 产品接入 .http://open.taobao.com/doc/detail.htm?id=102423&qq-pf-to=pcqq.group oms ...

  10. python字符串格式化--dict传参

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python字符串格式化--dict传参 print "I'm %(name)s. I'm %(a ...