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  

  

  

  

相关推荐