搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 赛仕数据圈 > SAS vs Pyspark 常用功能对照

SAS vs Pyspark 常用功能对照

赛仕数据圈 2020-05-26
本文从数据的读取,行或列的增删改查,以及数据集的排序、去重、合并等方面,对比了SAS和PySpark的基本操作,二者有很多相似的地方。


官网上对于PySpark的概述就一句话,PySpark is the Python API for Spark. 那Spark又是什么呢?官网的概述也还是一句话,Apache Spar is a unified analytics engine for large-scale data processing.


有了PySpark,使得用Python处理超大规模数据变得比以往相对容易、简单了一些。虽然pandas也十分便利,但是pandas处理数据集时,需要将数据集全部加载到内存中,如果数据集超过了电脑内存大小,则需要用一些不同寻常的方式,比如将数据集分块来处理。在PySpark中,则不必担心数据集过大,只管提交代码即可。


这点和SAS的使用感受很相似,在使用SAS时,不必担心数据集太大处理不了,这只不过是拿时间换空间,总归是可以处理的。如果用开源免费的Python,替代商业付费的SAS,一般情况下也不会有太大的差别,除了某些特定的行业,比如医药统计分析等,必须要使用SAS软件。


SAS vs PySpark 基本操作



SAS
Pyspark
读取CSV数据
proc import
spark.read.csv()
查看数据集信息
proc contents
df.printSchema()
打印输出数据集
proc print
df.show()
统计描述
proc means/proc summary
describe/summary
选择和删除字段
keep/drop
select/drop
筛选数据
where
where
排序
sort
sort
去重
nodup/nodupkey
dropDuplicates
重命名字段
rename
withColumnRenamed
新增列
a='男';a=b+2;
withColumn
上下合并数据集
set
unionByName
左右关联数据集
merge
join
条件判断
if else
when otherwise
函数的使用
month()
month()
SQL的使用
proc sql
spark.sql()


依然使用万能的class数据集进行举例,包含了5个字段,分别是'Name', 'Sex', 'Age', 'Height', 'Weight',总共19行数据,在D盘class.csv文件中。我们先建立一个spark进程,就像下面这样(PySpark安装可参考文章最后):


from pyspark.sql import SparkSessionfrom pyspark.sql import functions as Fspark = SparkSession.builder.master("local[*]").getOrCreate()

1
读取CSV数据
proc import file='d:\class.csv' out=data;run;
df=spark.read.csv("D:\\class.csv",header=True)

2
查看数据集信息
proc contents data=data;run;

SAS vs Pyspark 常用功能对照

df.printSchema()

SAS vs Pyspark 常用功能对照

SAS vs Pyspark 常用功能对照
3
打印输出数据集
proc print data=data;run;

SAS vs Pyspark 常用功能对照

df.show()

SAS vs Pyspark 常用功能对照

4
统计描述
proc means data=data;run;

SAS vs Pyspark 常用功能对照

df.summary().show()

SAS vs Pyspark 常用功能对照

5
选择和删除字段
data abc;keep name age;set data;run;data abc2;drop height weight;set data;run;

SAS vs Pyspark 常用功能对照

df.select("Name","Sex","Age").show()df.drop("Weight","Height").show()

SAS vs Pyspark 常用功能对照

SAS vs Pyspark 常用功能对照
6
筛选数据
data data1;set data;where sex='F' and age<14;run;

SAS vs Pyspark 常用功能对照

df.where((df.Age<14 ) & (df.Sex=='F')).show()

SAS vs Pyspark 常用功能对照

SAS vs Pyspark 常用功能对照
7
排序
proc sort data=data out=data2; by descending age height ;run;

SAS vs Pyspark 常用功能对照

df.sort(df.Age.desc(),df.Height).show()

SAS vs Pyspark 常用功能对照


8
去重
proc sort data=data out=data3; by sex;run;proc sort data=data3 nodupkey; by sex;run;

SAS vs Pyspark 常用功能对照

df.dropDuplicates(['sex']).show()

SAS vs Pyspark 常用功能对照

SAS vs Pyspark 常用功能对照
9
重命名字段
data data4;set data;rename name=名字;run;

SAS vs Pyspark 常用功能对照

df.withColumnRenamed('Name','姓名').show()

SAS vs Pyspark 常用功能对照


10
新增列
data data5;set data;班级="A1班";run;

SAS vs Pyspark 常用功能对照

df.withColumn('班级',F.lit('A1班')).show()

SAS vs Pyspark 常用功能对照


11
上下合并数据集
关于上下合并,在SAS中即使两个数据集的字段不完全一样,也是可以执行合并的,而pyspark中必须两个数据框字段名称一致,否则无法上下合并。
data data5;set data;班级="A1班";run;data data6;set data;班级="A2班";run;data data7;set data5 data6;if age=14; run;

SAS vs Pyspark 常用功能对照

df1=df.withColumn('班级',F.lit('A1班')).where(df.Age==14)df2=df.withColumn('班级',F.lit('A2班')).where(df.Age==14)df1.unionByName(df2).show()

SAS vs Pyspark 常用功能对照


12
左右关联数据集

在左右关联中,需要注意的是,如果两个数据集中有重复字段,在SAS中是离merge较远的数据集替代靠近merge的数据集的同名字段,在pyspark中,并没有像pandas中那样可以设置前缀的suffixes参数,而是在结果中输出同名的重复字段,这时候进一步引用这个合并后的数据集,就会有问题。这时候可以通过select筛选限定字段的来源,或者干脆在合并之前就去掉重复的不必要的字段。

proc sort data=data5; by name;run;proc sort data=data6; by name;run;data data8;merge data5(drop=height weight) data6(drop=sex age);by name;run;

SAS vs Pyspark 常用功能对照

ss=df1.join(df2,on='Name',how='left').\select(df1.Name,df1.Sex,df2.Height,df2.Weight).show()

SAS vs Pyspark 常用功能对照


13
条件判断
data data9;set data;if age<12 then age_ct='12岁以下';else if age<=13 then age_ct='12岁-13岁';else if age<=15 then age_ct='14岁-15岁';else age_ct='16岁及以上';run;

SAS vs Pyspark 常用功能对照

df.withColumn('age_ct',F .when(df.Age<12,"12岁以下") .when(df.Age<=13,"12岁-13岁") .when(df.Age<=15,"14岁-15岁") .otherwise("16岁及以上")).show()

SAS vs Pyspark 常用功能对照


14
函数的使用
data data10;set data;weight=round(weight,1);run;

SAS vs Pyspark 常用功能对照

df.withColumn('Weight',F.round('Weight',0)).show()

SAS vs Pyspark 常用功能对照


15
SQL的使用
proc sql;select data5.name,data5.sex,data6.agefrom data5,data6where data5.name=data6.name;quit;

SAS vs Pyspark 常用功能对照

df1.createOrReplaceTempView('df1')df2.createOrReplaceTempView('df2')spark.sql("select df1.name,df2.sex,df2.age \from df1,df2 where df1.name=df2.name").show()

SAS vs Pyspark 常用功能对照

SAS vs Pyspark 常用功能对照

补充:



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《SAS vs Pyspark 常用功能对照》的版权归原作者「赛仕数据圈」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注赛仕数据圈微信公众号

赛仕数据圈微信公众号:saslover

赛仕数据圈

手机扫描上方二维码即可关注赛仕数据圈微信公众号

赛仕数据圈最新文章

精品公众号随机推荐