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 操作。
其中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
IntegerType ,LongType, FloatType ,ArrayType ,MapType
df.createOrReaplaceTempView("table1")
df=spark.table("table1")
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类型)