pyspark 学习 pyspark.sql module

pyspark.sql.SparkSession

作用:创建DF、将DF注册为一张table,在table上执行sql,读取列式存储文件(parquet格式)

  • 注意parquet文件是一种以列式结构存储的数据,基于自己的理解,这种格式把数据转化为(r,d,value)能够压缩数据,在读取存储是可以加快速度,适合于我们开发过程中中间数据的存储再读取。

创建方式

from pyspark.sql import SparkSession
#创建
spark=SparkSession.bulider.getOrCreate()
  • 事实上,SparkSession,SparkContext ,SQLContext,HiveContext在看文档时,发现这些类的方法重合度很高,感觉功能大多数类似。https://blog.csdn.net/qq_21383435/article/details/77371142 介绍了SparkSession 和其他几种差别。

  • *总结区别是:SparkSession 是spark 2.0 为用户提供的统一的操作入口,SparkContext,SQLContext,HiveContext 能实现的功能,SparkSession 全部要包含。因此建议在写程序时,若版本达到2.0的情况,请使用SparkSession 操作。

SparkSession method

createDataFrame (data,schema)

  • 其中data 可以是一个list,rdd,或者pandas 中的DF

  • schema 可以为空,或者列名,或者显示的定义前面data的类型。

    • 注意 定义data 类型使用的方法:使用 pyspark.sql.types中的类型

    • schema需要声明 StructType,由一个StructField的列表组成,StructFiled的数据结构为:(string,dataType,nullable,metaData),举个栗子:

    • data=[(“zhaoli”,25),(“zhaoxiaoli”,18)] 我们要转化的是一个以(string,int)为元素的list,因此在声明schema时需要声明一个string的StructField和一个int型的StrucField .

from pyspark.sql.types import *
data=[("zhaoli",25),("zhaoxiaoli",18)]
schema=StructType([StructField("name",StringType(),nullable=True),\
StructField("age",IntegerType(),nullable=True)]\
)

pyspark.sql.types 的所有类型

  • NullType 是一个类名,因此StructField中声明时,需要将其实例化,同理其他类型

  • StringType

  • BooleanType

  • TimestampType

  • IntegerTypeLongTypeFloatTypeArrayTypeMapType

df、table转化 使用spark.table1 转化为df

df.createOrReaplaceTempView("table1")
df=spark.table("table1")	

pyspark.sql.DataFrame

  • 可以通过SparkSession 创建得到dataframe,或者rdd.toDF()

method of DataFrame

agg 聚合操作

  • 举个栗子:
from pyspark.sql import functions as F
df.agg(F.min(df.age),F.max(df.age),F.sum(),F.count(),F.avg(),F.countDistinct())

agg中的函数需要按照pyspark.sql.functions中的方法。(处理的时column类型)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值