Spark与Pandas中DataFrame对比(综述)

大数据与分布式 fireling 10941℃

搭建Spark运行环境:

  • 可以自搭建Hadoop的standalone版,主要配置在于JDK和Hadooop的环境变量设置。

    在此基础上搭建Spark的standalone版,下载“Hadoop Free”版本,主要配置在于Scala和Spark的环境变量设置。
    如果使用到之前的Hadoop,需要在Spark下的conf/spark-env.sh添加Hadoop的classpath,以便支持Hadoop的HDFS/Hive等Input/Output Formats。

  • 由于研究的是standalone版,也可以直接下载Spark基于Hadoop编译好的版本。比较方便。

下面是Spark与Pandas中DataFrame对比介绍:

Spark与Pandas支持数据类型:

Spark支持本地文件系统,Hadoop的HDFS的存储方式,HBase,Cassandra,Amazon S3,等等。

PySpark can create distributed datasets from any storage source supported by Hadoop, including your local file system, HDFS, Cassandra, HBase, Amazon S3, etc. Spark supports text files, SequenceFiles, and any other Hadoop InputFormat.

Pandas支持csv文件、hdf5文件、excel文件,也支持Python中pickle序列化类型。

Formats and Sources supported by DataFrames

Spark中DataFrame和Pandas中DataFrame支持的数据类型:

Spark下的DataFrame支持的数据类型:

DataFrames can be constructed from a wide array of sources such as: structured data files, tables in Hive, external databases, or existing RDDs.

比如:


df = sqlContext.read.json("./examples/src/main/resources/people.json")  
df = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")
Pandas中DataFrame支持的数据类型:

Pandas中可以从list、dict、ndarray数据类型转换成DadaFrame,也可以从外部文件读取,比如说csv文件、hdf5文件、excel文件:

比如:


df.to_csv('foo.csv')
pd.read_csv('foo.csv')
df.to_hdf('foo.h5','df')
pd.read_hdf('foo.h5','df')
df.to_excel('foo.xlsx', sheet_name='Sheet1')
pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])

Spark和Pandas对于map-reduce的操作:

Spark中map,reduce接受一个参数:map(func),reduce(func)

Spark下map的返回类型是seqRDDs

Pandas中map,reduce接受至少两个参数:map(func, list),reduce(func, list)

Pandas下map的返回类型是seq

Spark和Pandas下对于DataFrame的显示:

Spark有df.show()、df.printSchema()

Pandas有df.head()、df.tail()

Spark和Pandas对于SQL的支持:

Spark有类似df.registerTempTable(“people”)的操作,后续可以使用sql语句进行操作得到Dataframe。

Pandas下需要import sqlite3,使用pd.read_sql()来返回Dataframe。

Spark和Pandas对于行列统计:

Spark和Pandas中的count()返回数据条目,即列数。

Pandas中有df.shape()返回Dataframe的行列。

Spark和Pandas下DataFrame的可修改性:

Spark中DataFrame是不可修改的,可以使用df.withColumn()。必须新建一列保存结果,再去删除原来列。

Pandas中DataFrame是可以修改的,列操作直接可以进行替换。可以使用df.ix[index]或者df.ix[index_name]或者df[index_name]来处理。

Spark和Pandas下的item过滤:

Spark中的过滤,需要使用filter函数进行条件过滤。

Pandas中的过滤,直接在index中加入条件即可,也就是所谓的布尔型索引。

Spark下Laziness特性:

Spark中对RDDs的操作包括两种,transformations和actions。其中transformations的特性就是laziness。也就是说,the transformations are only computed when an action requires a result to be returned to the driver program。

类似于Python中的Generator或者Iterator,当计算行为触发时才进行转换操作。

而Pandas中没有这一点。

Spark下的persist特性:

对于数据,rdd操作也有缓存机制。也就是说,支持persist()或者cache()操作,特别是对于分布式系统来说,这种机制能并行计算实现加速。

Pandas对于NA值的操作:

Pandas中NA的主要表现为np.NaN,另外Python内建的None也会被当做NA处理。处理NA的方法有四种:dropna,fillna,isnull,notnull

Pandas有df. dropna()方法和df.fillna()方法。

Pandas对于金融时间序列的操作:

Pandas可以对金融时间序列进行操作,如pd.date_range(‘1/1/2012′, periods=100, freq=’S’)

Pandas存在df.number.diff(periods=1)或者df.number.diff(periods=1).shift(-1).fillna(0)等N阶差分手段。

 

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

喜欢 (9)