pyspark基础知识点
1. 查
1.1 行元素查询操作
像SQL那样打印列表前20元素,show函数内可用int类型指定要打印的行数:
df.show() df.show(30)
以树的形式打印概要:
df.printSchema()
获取头几行到本地:
list = df.head(3) # Example: [Row(a=1, b=1), Row(a=2, b=2), ... ...] list = df.take(5) # Example: [Row(a=1, b=1), Row(a=2, b=2), ... ...]
查询总行数:
df.count()
查询某列为null的行:
from pyspark.sql.functions import isnull df = df.filter(isnull("col_a"))
输出list类型,list中每个元素是Row类:
list = df.collect()#注:此方法将所有数据全部导入到本地,返回一个Array对象
查询概况
df.describe().show()
去重set操作,跟py中的set一样,可以distinct()一下去重,同时也可以.count()计算剩余个数
data.select(‘columns‘).distinct().show()
随机抽样有两种方式,一种是在HIVE里面查数随机;另一种是在pyspark之中
#HIVE里面查数随机 sql = "select * from data order by rand() limit 2000" #pyspark之中 sample = result.sample(False,0.5,0) # randomly select 50% of lines
1.2 列元素操作
获取Row元素的所有列名:
r = Row(age=11, name=‘Alice‘) print(r.columns) # [‘age‘, ‘name‘]
选择一列或多列:select
df["age"] df.age df.select(“name”) df.select(df[‘name’], df[‘age’]+1) df.select(df.a, df.b, df.c) # 选择a、b、c三列 df.select(df["a"], df["b"], df["c"]) # 选择a、b、c三列
重载的select方法:
#同时显示id列 、id + 1列 jdbcDF.select(jdbcDF( "id" ), jdbcDF( "id") + 1 ).show( false) #还可以用where按条件选择 jdbcDF.where("id = 1 or c1 = ‘b‘" ).show()
1.3 排序
orderBy和sort:按指定字段排序,默认为升序
train.orderBy(train.Purchase.desc()).show(5)
1.4 抽样
sample是抽样函数
t1 = train.sample(False, 0.2, 42) t2 = train.sample(False, 0.2, 43) t1.count(),t2.count() Output: (109812, 109745)
withReplacement = True or False代表是否有放回。fraction = x, where x = .5,代表抽取百分比
2.增、改
2.1 新建数据
有这么两种常规的新建数据方式:createDataFrame、.toDF()
sqlContext.createDataFrame(pd.dataframe())#是把pandas的dataframe转化为spark.dataframe格式,所以可以作为两者的格式转化 from pyspark import SparkContext, SparkConf from pyspark.sql import SQLContext from pyspark import sql conf = SparkConf().setAppName("myFirstApp").setMaster("local") sc = SparkContext(conf=conf) sqlContext = sql.SQLContext(sc) a = sc.parallelize([[1, "a"], [2, "b"], [3, "c"], [4, "d"], [5, "e"]]).toDF([‘ind‘, "state"]) a.show()
参考:https://blog.csdn.net/sinat_26917383/article/details/80500349
相关推荐
wenwentana 2020-07-17
Oeljeklaus 2020-03-28
89377069 2019-12-30
ITsource 2019-10-10
TheBigBlue 2019-06-25
ALLWITHLOVE 2018-08-28
hongduna 2018-08-02
清醒疯子 2018-04-05