Pandas和Spark DataFrames 的6种不同
Spark DataFrames的代码都在pyspark.sql package下面(很是奇怪的,历史遗留的命名:这已经不仅仅有关SQL的了)。 使用Pandas,您可以轻松地使用read_csv()取CSV文件。 开箱即用,Spark DataFrame支持读取数据各种热门的数据结构,如JSON文件,Parquet文件,Hive表 - 无论是从本地文件系统,分布式文件系统(HDFS),云存储(S3),或外部关系数据库系统。 在Spark中,DataFrame是一个以命名列方式组织的分布式数据集,等同于关系型数据库中的一个表,也相当于R/Python中的data frames(但是进行了更多的优化)。DataFrames可以由结构化数据文件转换而来,也可以从Hive中的表得来,以及可以转换自外部数据库或现 有的RDD。 但是Spark并没有直接支持CSV。你必须使用一个单独的库:Spark-CSV。 sparkDF.count() 和 pandasDF.count()并不完全一样。 sparkDF.count() 返回数据的行数,而pandasDF.count()返回每列非NA/Null的数量。 而且Spark DataFrame暂时不支持.shape—Pandas中会经常用到。 在Pandas中,为了看一个数据帧的内容的表格视图,您通常使用pandasDF.head(5),或pandasDF.tail(5)。在IPython Notebooks,它会显示一个有边界连续的漂亮数组。 在Spark中,你可以使用sparkDF.head(5),但它输出的数据视图比较丑陋。你应该更喜欢sparkDF.show(5)。请注意,您不能查看最后几行(没有.tail()方法,由于分布式环境中计算比较复杂)。 使用Pandas,你基本上不用关心类型:Pandas会替我们自动推断。 使用Spark DataFrames加载CSV文件,默认的数据类型是”strings”。 要改变Spark的数据类型,可以使用.cast()法,或.astype(),它是为那些像我一样来自Pandas用户创造的一个别名)。请注意,您必须创建一个新列,并删除旧的(已经有一些改进的方法,可以替换旧的列,但目前不能使用Python API)。 无论是Pandas还是Spark,.describe()产生不同的统计数据。然而他们有略微的不同,原因有两个: * 在Pandas,NaN值都被排除在外。在Spark,NaN值使计算均值和标准差失败; * 标准偏差不以相同的方式计算。默认情况下,Pandas中使用无偏(或更正)标准偏差,Spark使用未修正的标准偏差。所不同的是在分母中使用的N-1个代替N。 在机器学习中,通常是对已经存在的列进行积分(特征工程)产生新的列。在Pandas,你可以使用’[]’运算符。在Spark你不能 - DataFrames是不可改变的。您应该使用.withColumn()。 Spark和Pandas的DataFrames非常相似。不过,Pandas API仍然更方便,功能强大 - 但差距正在很快的缩小。尽管它的固有的设计约束(不变性,分布式计算,延迟计算,…),Spark想要尽可能的模仿Pandas(根据方法名)。我的猜测是,这一目标将很快实现。不仅如此,Spark还有Spark.ml,模仿scikit-learn,Spark可以成为完美的一站式工业数据科学工具。 |
|