今天继续汇总一下在使用pyspark中使用到的知识,想与我交流的话可以加群Python & Spark 636866908,或者加群R语言&大数据分析456726635。
1. 数据框添加一列全是0的值。
df.withColumn("newcolumn",df.id*0) #使用数值型的一列id,然后该列每个元素乘以0生成新列newcolumn
2. 数据框左连接
newdf = df1.join(df2,df1.id == df2.id1,'left') #进行左连接,即以左边数据框的id为基,df2.id1没在df1.id中的会填充null
3. 使用值填充数据框列中的null值
df.withColumn('newid',when(df.id.isNull(),df.label).otherwise(df.id)) #对于id列中的null值使用label列的值替换,注意这里使用了when,isNull,otherwise函数。
4. lzo格式的数据读取
df = sqlContext.read.json("user/zhangsan/data/*.lzo") #使用read.json函数读取data下的所有.lzo文件返回数据框格式。
5. 另一种修改列名的方法
df.select(col("id").alias("id1")) #使用alias函数将列id改成id1
6. jupter将数据框写到本地csv
df = df.toPandas()
df.to_csv("本地路径/df.csv",index=None) # 将df.csv写到本地,且不要输出序号
7. filter过滤not isin操作
df.filter(df.id.isin(anlist) == False) 或者df.filter(~df.id.isin(anlist)) #筛选id不在anlist中的数据框
8. 数据框根据一列升序或降序排序
df.sort("id",ascending = False) #默认是True升序,False是降序
9. 将数据框的一列float值转成int
df.select(df.id.cast("int")) #把df中的id列由float型转为int,使用了cast函数。
10. 对数据框进行抽样
df.sample(False,0.5,22) #对df数据框使用sample进行抽样,False无放回抽样,抽样比例是0.5,seed是22
11.对数据框使用正则表达式筛选符合条件的数据
df.select(regexp_extract("id","((.*?)bc)",0).alias("newid")) #对df中的id列筛选最后字符是bc的数据,并修改id列名.