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,代表抽取百分比