数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
九、functions
pyspark.sql.functions
模块提供了一些内建的函数,它们用于创建Column
- 它们通常多有公共的参数
col
,表示列名或者Column
。 - 它们的返回结果通常都是
Column
- 它们通常多有公共的参数
9.1 数学函数
这里的col
都是数值列。
abs(col)
:计算绝对值acos(col)
:计算acos
cos(col)
:计算cos
值cosh(col)
:计算cosh
值asin(col)
:计算asin
atan(col)
:计算atan
atan2(col1,col2)
:计算从直角坐标 $ MathJax-Element-4 $ 到极坐标 $ MathJax-Element-5 $ 的角度 $ MathJax-Element-6 $bround(col,scale=0)
:计算四舍五入的结果。如果scale>=0
,则使用HALF_EVEN
舍入模式;如果scale<0
,则将其舍入到整数部分。cbrt(col)
:计算立方根ceil(col)
:计算ceiling
值floor(col)
:计算floor
值corr(col1,col2)
:计算两列的皮尔逊相关系数covar_pop(col1,col2)
:计算两列的总体协方差 (公式中的除数是N
)covar_samp(col1,col2)
:计算两列的样本协方差 (公式中的除数是N-1
)degrees(col)
:将弧度制转换为角度制radians(col)
:将角度制转换为弧度制exp(col)
:计算指数: $ MathJax-Element-7 $expml(col)
:计算指数减一: $ MathJax-Element-8 $fractorial(col)
:计算阶乘pow(col1,col2)
:返回幂级数 $ MathJax-Element-9 $hash(*cols)
:计算指定的一些列的hash code
,返回一个整数列参数:
cols
:一组列名或者Columns
hypot(col1,col2)
:计算 $ MathJax-Element-10 $ (没有中间产出的上溢出、下溢出),返回一个数值列log(arg1,arg2=None)
:计算对数。其中第一个参数为底数。如果只有一个参数,则使用自然底数。参数:
arg1
:如果有两个参数,则它给出了底数。否则就是对它求自然底数。arg2
:如果有两个参数,则对它求对数。
log10(col)
:计算基于10的对数log1p(col)
:计算 $ MathJax-Element-11 $log2(col)
:计算基于2的对数rand(seed=None)
:从均匀分布U~[0.0,1.0]
生成一个独立同分布(i.i.d
) 的随机列参数:
seed
:一个整数,表示随机数种子。
randn(seed=None)
:从标准正态分布N~(0.0,1.0)
生成一个独立同分布(i.i.d
) 的随机列参数:
seed
:一个整数,表示随机数种子。
rint(col)
:返回最接近参数值的整数的double
形式。round(col,scale=0)
:返回指定参数的四舍五入形式。如果
scale>=0
,则使用HALF_UP
的舍入模式;否则直接取参数的整数部分。signum(col)
:计算正负号sin(col)
:计算sin
sinh(col)
:计算sinh
sqrt(col)
:计算平方根tan(col)
:计算tan
tanh(col)
:计算tanh
toDegreees(col)
:废弃。使用degrees()
代替toRadias(col)
:废弃,使用radians()
代替
9.2 字符串函数
ascii(col)
:返回一个数值列,它是旧列的字符串中的首个字母的ascii
值。其中col
必须是字符串列。base64(col)
:返回一个字符串列,它是旧列(二进制值)的BASE64
编码得到的字符串。其中col
必须是二进制列。bin(col)
:返回一个字符串列,它是旧列(二进制值)的字符串表示(如二进制1101
的字符串表示为'1101'
)其中col
必须是二进制列。cov(col,fromBase,toBase)
:返回一个字符串列,它是一个数字的字符串表达从fromBase
转换到toBase
。参数:
col
:一个字符串列,它是数字的表达。如1028
。它的基数由fromBase
给出fromBase
:一个整数,col
中字符串的数值的基数。toBase
:一个整数,要转换的数值的基数。
示例:
xxxxxxxxxx
df = spark_session.createDataFrame([("010101",)], ['n']) df.select(conv(df.n, 2, 16).alias('hex')).collect() # 结果:[Row(hex=u'15')]
concat(*cols)
:创建一个新列,它是指定列的字符串拼接的结果(没有分隔符)。参数
cols
:列名字符串列表,或者Column
列表。要求这些列具有同样的数据类型
concat_ws(sep,*cols)
:创建一个新列,它是指定列的字符串使用指定的分隔符拼接的结果。参数
sep
:一个字符串,表示分隔符cols
:列名字符串列表,或者Column
列表。要求这些列具有同样的数据类型
decode(col,charset)
:从二进制列根据指定字符集来解码成字符串。参数:
col
:一个字符串或者Column
,为二进制列charset
:一个字符串,表示字符集。
encode(col,charset)
:把字符串编码成二进制格式。参数:
col
:一个字符串或者Column
,为字符串列charset
:一个字符串,表示字符集。
format_number(col,d)
:格式化数值成字符串,根据HALF_EVEN
来四舍五入成d
位的小数。参数:
col
:一个字符串或者Column
,为数值列d
:一个整数,格式化成表示d
位小数。
format_string(format,*cols)
:返回print
风格的格式化字符串。参数:
format
:print
风格的格式化字符串。如%s%d
cols
:一组列名或者Columns
,用于填充format
hex(col)
:计算指定列的十六进制值(以字符串表示)。参数:
col
:一个字符串或者Column
,为字符串列、二进制列、或者整数列
initcap(col)
:将句子中每个单词的首字母大写。参数:
col
:一个字符串或者Column
,为字符串列
input_file_name()
:为当前的spark task
的文件名创建一个字符串列instr(str,substr)
:给出substr
在str
的首次出现的位置。位置不是从0开始,而是从1开始的。如果
substr
不在str
中,则返回 0 。如果
str
或者substr
为null
,则返回null
。参数:
str
:一个字符串或者Column
,为字符串列substr
:一个字符串
locate(substr,str,pos=1)
:给出substr
在str
的首次出现的位置(在pos
之后)。位置不是从0开始,而是从1开始的。如果
substr
不在str
中,则返回 0 。如果
str
或者substr
为null
,则返回null
。参数:
str
:一个字符串或者Column
,为字符串列substr
:一个字符串pos
::起始位置(基于0开始)
length(col)
:计算字符串或者字节的长度。参数:
col
:一个字符串或者Column
,为字符串列,或者为字节列。
levenshtein(left,right)
:计算两个字符串之间的Levenshtein
距离。Levenshtein
距离:刻画两个字符串之间的差异度。它是从一个字符串修改到另一个字符串时,其中编辑单个字符串(修改、插入、删除)所需要的最少次数。lower(col)
:转换字符串到小写lpad(col,len,pad)
:对字符串,向左填充。参数:
col
:一个字符串或者Column
,为字符串列len
:预期填充后的字符串长度pad
:填充字符串
ltrim(col)
:裁剪字符串的左侧空格md5(col)
:计算指定列的MD5
值(一个32字符的十六进制字符串)regexp_extract(str,pattern,idx)
:通过正则表达式抽取字符串中指定的子串 。参数:
str
:一个字符串或者Column
,为字符串列,表示被抽取的字符串。pattern
: 一个Java
正则表达式子串。idx
:表示抽取第几个匹配的结果。
返回值:如果未匹配到,则返回空字符串。
.regexp_replace(str,pattern,replacement)
: 通过正则表达式替换字符串中指定的子串。参数:
str
:一个字符串或者Column
,为字符串列,表示被替换的字符串。pattern
: 一个Java
正则表达式子串。replacement
:表示替换的子串
返回值:如果未匹配到,则返回空字符串。
repeat(col,n)
:重复一个字符串列n
次,结果返回一个新的字符串列。参数:
col
:一个字符串或者Column
,为字符串列n
:一个整数,表示重复次数
reverse(col)
:翻转一个字符串列,结果返回一个新的字符串列rpad(col,len,pad)
:向右填充字符串到指定长度。参数:
col
:一个字符串或者Column
,为字符串列len
: 指定的长度pad
:填充字符串
rtrim(col)
:剔除字符串右侧的空格符sha1(col)
: 以16进制字符串的形式返回SHA-1
的结果sha2(col,numBites)
:以16进制字符串的形式返回SHA-2
的结果。numBites
指定了结果的位数(可以为244,256,384,512
,或者0
表示256
)soundex(col)
:返回字符串的SoundEx
编码split(str,pattern)
: 利用正则表达式拆分字符串。产生一个array
列参数:
str
:一个字符串或者Column
,为字符串列pattern
:一个字符串,表示正则表达式
substring(str,pos,len)
:抽取子串。参数:
str
:一个字符串或者Column
,为字符串列,或者字节串列pos
:抽取的起始位置len
:抽取的子串长度
返回值:如果
str
表示字符串列,则返回的是子字符串。如果str
是字节串列,则返回的是字节子串。
substring_index(str,delim,count)
:抽取子串参数:
str
: 一个字符串或者Column
,为字符串列delim
:一个字符串,表示分隔符count
:指定子串的下标。 如果为正数,则从左开始,遇到第count
个delim
时,返回其左侧的内容; 如果为负数,则从右开始,遇到第abs(count)
个delim
时,返回其右侧的内容;
示例:
xxxxxxxxxx
df = spark.createDataFrame([('a.b.c.d',)], ['s']) df.select(substring_index(df.s, '.', 2).alias('s')).collect() # [Row(s=u'a.b')] df.select(substring_index(df.s, '.', -3).alias('s')).collect() # [Row(s=u'b.c.d')]
translate(srcCol,matching,replace)
:将srcCol
中指定的字符替换成另外的字符。参数:
srcCol
: 一个字符串或者Column
,为字符串列matching
: 一个字符串。只要srcCol
中的字符串,有任何字符匹配了它,则执行替换replace
:它一一对应于matching
中要替换的字符
示例:
xxxxxxxxxx
df = spark.createDataFrame([('translate',)], ['a']) df.select(translate('a', "rnlt", "123") .alias('r')).collect() # [Row(r=u'1a2s3ae')] # r->1, n->2,l->3, t->空字符
trim(col)
:剔除字符串两侧的空格符unbase64(col)
: 对字符串列执行BASE64
编码,并且返回一个二进制列unhex(col)
:对字符串列执行hex
的逆运算。 给定一个十进制数字字符串,将其逆转换为十六进制数字字符串。upper(col)
:将字符串列转换为大写格式
9.3 日期函数
add_months(start, months)
:增加月份参数:
start
:列名或者Column
表达式,指定起始时间months
:指定增加的月份
示例:
xxxxxxxxxx
df = spark_session.createDataFrame([('2015-04-08',)], ['d']) df.select(add_months(df.d, 1).alias('d')) # 结果为:[Row(d=datetime.date(2015, 5, 8))]
current_data()
:返回当前日期作为一列current_timestamp()
:返回当前的时间戳作为一列date_add(start,days)
:增加天数参数:
start
:列名或者Column
表达式,指定起始时间days
:指定增加的天数
date_sub(start,days)
:减去天数参数:
start
:列名或者Column
表达式,指定起始时间days
:指定减去的天数
date_diff(end,start)
:返回两个日期之间的天数差值参数:
end
:列名或者Column
表达式,指定结束时间。为date/timestamp/string
start
:列名或者Column
表达式,指定起始时间。为date/timestamp/string
date_format(date,format)
:转换date/timestamp/string
到指定格式的字符串。参数:
date
:一个date/timestamp/string
列的列名或者Column
format
:一个字符串,指定了日期的格式化形式。支持java.text.SimpleDateFormat
的所有格式。
dayofmonth(col)
:返回日期是当月的第几天(一个整数)。其中col
为date/timestamp/string
dayofyear(col)
:返回日期是当年的第几天(一个整数)。其中col
为date/timestamp/string
from_unixtime(timestamp, format='yyyy-MM-dd HH:mm:ss')
:转换unix
时间戳到指定格式的字符串。参数:
timestamp
:时间戳的列format
:时间格式化字符串
from_utc_timestamp(timestamp, tz)
:转换unix
时间戳到指定时区的日期。hour(col)
:从指定时间中抽取小时,返回一个整数列参数:
col
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列
minute(col)
:从指定时间中抽取分钟,返回一个整数列参数:
col
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列
second(col)
:从指定的日期中抽取秒,返回一个整数列。参数:
col
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列
month(col)
:从指定时间中抽取月份,返回一个整数列参数:
col
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列
quarter(col)
:从指定时间中抽取季度,返回一个整数列参数:
col
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列
last_day(date)
:返回指定日期的当月最后一天(一个datetime.date
)参数:
date
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列
months_between(date1,date2)
:返回date1
到date2
之间的月份(一个浮点数)。也就是
date1-date2
的天数的月份数量。如果为正数,表明date1 > date2
。参数:
date1
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列date2
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列
next_day(date,dayOfWeek)
:返回指定天数之后的、且匹配dayOfWeek
的那一天。参数:
date1
:一个字符串或者Column
。是表示时间的字符串列,或者datetime
列dayOfWeek
:指定星期几。是大小写敏感的,可以为:'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'
to_date(col,format=None)
:转换pyspark.sql.types.StringType
或者pyspark.sql.types.TimestampType
到pyspark.pysql.types.DateType
参数:
col
:一个字符串或者Column
。是表示时间的字符串列format
:指定的格式。默认为yyyy-MM-dd
to_timestamp(col,format=None)
:将StringType,TimestampType
转换为DataType
。参数:
col
:一个字符串或者Column
。是表示时间的字符串列format
:指定的格式。默认为yyyy-MM-dd HH:mm:ss
to_utc_timestamp(timestamp,tz)
:根据给定的时区,将StringType,TimestampType
转换为DataType
。参数:
col
:一个字符串或者Column
。是表示时间的字符串列tz
:一个字符串,表示时区
trunc(date,format)
:裁剪日期到指定的格式 。参数:
date
:一个字符串或者Column
。是表示时间的字符串列format
:指定的格式。如:'year','YYYY','yy','month','mon','mm','d'
unix_timestamp(timestamp=None,format='yyyy-MM-dd HH:mm:ss')
:给定一个unix timestamp
(单位为秒),将其转换为指定格式的字符串。使用默认的时区和默认的locale
。如果转换失败,返回
null
。如果
timestamp=None
,则返回当前的timestamp
。参数:
timestamp
:一个unix
时间戳列。format
:指定转换的格式
weekofyear(col)
: 返回给定时间是当年的第几周。返回一个整数。year(col)
:从日期中抽取年份,返回一个整数。
9.4 聚合函数
count(col)
:计算每一组的元素的个数。avg(col)
:计算指定列的均值approx_count_distinct(col, rsd=None)
:统计指定列有多少个distinct
值countDistinct(col,*cols)
:计算一列或者一组列中的distinct value
的数量。collect_list(col)
:返回指定列的元素组成的列表(不会去重)collect_set(col)
:返回指定列的元素组成的集合(去重)first(col,ignorenulls=False)
:返回组内的第一个元素。如果
ignorenulls=True
,则忽略null
值,直到第一个非null
值。如果都是null
,则返回null
。如果
ignorenulls=False
,则返回组内第一个元素(不管是不是null
)last(col,ignorenulls=False)
:返回组内的最后一个元素。如果
ignorenulls=True
,则忽略null
值,直到最后一个非null
值。如果都是null
,则返回null
。如果
ignorenulls=False
,则返回组内最后一个元素(不管是不是null
)grouping(col)
:判断group by list
中的指定列是否被聚合。如果被聚合则返回1,否则返回 0。grouping_id(*cols)
:返回grouping
的级别。cols
必须严格匹配grouping columns
,或者为空(表示所有的grouping columns
)kurtosis(col)
:返回一组元素的峰度max(col)
:返回组内的最大值。mean(col)
:返回组内的均值min(col)
:返回组内的最小值skewness(col)
: 返回组内的偏度stddev(col)
:返回组内的样本标准差(分母除以N-1
)stddev_pop(col)
:返回组内的总体标准差(分母除以N
)stddev_samp(col)
: 返回组内的标准差,与stddev
相同sum(col)
:返回组内的和sumDistinct(col)
:返回组内distinct
值的和var_pop(col)
:返回组内的总体方差。 (分母除以N
)var_samp(col)
:返回组内的样本方差 。(分母除以N-1
)variance(col)
:返回组内的总体方差,与var_pop
相同
9.5 逻辑与按位函数
.bitwiseNot(col)
:返回一个字符串列,它是旧列的比特级的取反。isnan(col)
:返回指定的列是否是NaN
isnull(col)
:返回指定的列是否为null
shiftLeft(col,numBites)
:按位左移指定的比特位数。shiftRight(col,numBites)
:按位右移指定的比特位数。shiftRightUnsigned(col,numBites)
:按位右移指定的比特位数。但是无符号移动。
9.6 排序、拷贝
asc(col)
:返回一个升序排列的Column
desc(col)
:返回一个降序排列的Column
col(col)
:返回值指定列组成的Column
column(col)
:返回值指定列组成的Column
9.7 窗口函数
window(timeColumn,windowDuration,slideDuration=None,startTime=None)
:将rows
划分到一个或者多个窗口中(通过timestamp
列)参数:
timeColumn
:一个时间列,用于划分window
。它必须是pyspark.sql.types.TimestampType
windowDuration
: 表示时间窗口间隔的字符串。如'1 second','1 day 12 hours','2 minutes'
。单位字符串可以为'week','day','hour','minute','second','millisecond','microsecond'
。slideDuration
: 表示窗口滑动的间隔,即:下一个窗口移动多少。如果未提供,则窗口为tumbling windows
。 单位字符串可以为'week','day','hour','minute','second','millisecond','microsecond'
。startTime
:起始时间。它是1970-01-01 00:00:00
以来的相对偏移时刻。如,你需要在每个小时的15
分钟开启小时窗口,则它为15 minutes
:12:15-13:15,13:15-14:15,...
返回值:返回一个称作
window
的struct
,它包含start,end
(一个半开半闭区间)
cume_dist()
:返回一个窗口中的累计分布概率。dense_rank()
:返回窗口内的排名。(1,2,...
表示排名为1,2,...
)它和
rank()
的区别在于:dense_rank()
的排名没有跳跃(比如有3个排名为1,那么下一个排名是2,而不是下一个排名为4)rank()
:返回窗口内的排名。(1,2,...
表示排名为1,2,...
)。如有3个排名为1,则下一个排名是 4。
percent_rank()
:返回窗口的相对排名(如:百分比)lag(col,count=1,default=None)
:返回当前行之前偏移行的值。如果当前行之前的行数小于count
,则返回default
值。参数:
col
:一个字符串或者Column
。开窗的列count
:偏移行default
:默认值
lead(col,count=1,default=None)
:返回当前行之后偏移行的值。如果当前行之后的行数小于count
,则返回default
值。参数:
col
:一个字符串或者Column
。开窗的列count
:偏移行default
:默认值
ntile(n)
:返回有序窗口分区中的ntile group id
(从 1 到n
)row_number()
: 返回一个序列,从 1 开始,到窗口的长度。
9.8 其它
array(*cols)
:创新一个新的array
列。参数:
cols
:列名字符串列表,或者Column
列表。要求这些列具有同样的数据类型
示例:
xxxxxxxxxx
df.select(array('age', 'age').alias("arr")) df.select(array([df.age, df.age]).alias("arr"))
array_contains(col, value)
:创建一个新列,指示value
是否在array
中(由col
给定)其中
col
必须是array
类型。而value
是一个值,或者一个Column
或者列名。判断逻辑:
- 如果
array
为null
,则返回null
; - 如果
value
位于array
中,则返回True
; - 如果
value
不在array
中,则返回False
- 如果
示例:
xxxxxxxxxx
df = spark_session.createDataFrame([(["a", "b", "c"],), ([],)], ['data']) df.select(array_contains(df.data, "a"))
create_map(*cols)
:创建一个map
列。参数:
cols
:列名字符串列表,或者Column
列表。这些列组成了键值对。如(key1,value1,key2,value2,...)
示例:
xxxxxxxxxx
df.select(create_map('name', 'age').alias("map")).collect() #[Row(map={u'Alice': 2}), Row(map={u'Bob': 5})]
broadcast(df)
:标记df
这个Dataframe
足够小,从而应用于broadcast join
参数:
df
:一个Dataframe
对象
coalesce(*cols)
:返回第一个非null
的列组成的Column
。如果都为null
,则返回null
参数:
cols
:列名字符串列表,或者Column
列表。
crc32(col)
:计算二进制列的CRC32
校验值。要求col
是二进制列。explode(col)
:将一个array
或者map
列拆成多行。要求col
是一个array
或者map
列。示例:
xxxxxxxxxx
eDF = spark_session.createDataFrame([Row(a=1, intlist=[1,2,3], mapfield={"a": "b"})]) eDF.select(explode(eDF.intlist).alias("anInt")).collect() # 结果为:[Row(anInt=1), Row(anInt=2), Row(anInt=3)] eDF.select(explode(eDF.mapfield).alias("key", "value")).show() #结果为: # +---+-----+ # |key|value| # +---+-----+ # | a| b| # +---+-----+posexplode(col)
: 对指定array
或者map
中的每个元素,依据每个位置返回新的一行。要求
col
是一个array
或者map
列。示例:
xxxxxxxxxx
eDF = spark_session.createDataFrame([Row(a=1, intlist=[1,2,3], mapfield={"a": "b"})]) eDF.select(posexplode(eDF.intlist)).collect() #结果为:[Row(pos=0, col=1), Row(pos=1, col=2), Row(pos=2, col=3)]expr(str)
:计算表达式。参数:
str
:一个表达式。如length(name)
from_json(col,schema,options={})
:解析一个包含JSON
字符串的列。如果遇到无法解析的字符串,则返回null
。参数:
col
:一个字符串列,字符串是json
格式schema
:一个StructType
(表示解析一个元素),或者StructType
的ArrayType
(表示解析一组元素)options
:用于控制解析过程。
示例:
xxxxxxxxxx
from pyspark.sql.types import * schema = StructType([StructField("a", IntegerType())]) df = spark_session.createDataFrame([(1, '{"a": 1}')], ("key", "value")) df.select(from_json(df.value, schema).alias("json")).collect() #结果为:[Row(json=Row(a=1))]
get_json_object(col,path)
:从json
字符串中提取指定的字段。如果json
字符串无效,则返回null
.参数:
col
:包含json
格式的字符串的列。path
:json
的字段的路径。
示例:
xxxxxxxxxx
data = [("1", '''{"f1": "value1", "f2": "value2"}'''), ("2", '''{"f1": "value12"}''')] df = spark_session.createDataFrame(data, ("key", "jstring")) df.select(df.key, get_json_object(df.jstring, '$.f1').alias("c0"), get_json_object(df.jstring, '$.f2').alias("c1") ).collect() # 结果为:[Row(key=u'1', c0=u'value1', c1=u'value2'), Row(key=u'2', c0=u'value12', c1=None)]
greatest(*cols)
:返回指定的一堆列中的最大值。要求至少包含2列。它会跳过
null
值。如果都是null
值,则返回null
。least(*cols)
:返回指定的一堆列中的最小值。要求至少包含2列。它会跳过
null
值。如果都是null
值,则返回null
。json_tuple(col,*fields)
:从json
列中抽取字段组成新列(抽取n
个字段,则生成n
列)参数:
col
:一个json
字符串列fields
:一组字符串,给出了json
中待抽取的字段
lit(col)
:创建一个字面量值的列monotonically_increasing_id()
:创建一个单调递增的id
列(64位整数)。它可以确保结果是单调递增的,并且是
unique
的,但是不保证是连续的。它隐含两个假设:
- 假设
dataframe
分区数量少于1 billion
- 假设每个分区的记录数量少于
8 billion
- 假设
nanvl(col1,col2)
:如果col1
不是NaN
,则返回col1
;否则返回col2
。要求
col1
和col2
都是浮点列(DoubleType
或者FloatType
)size(col)
:计算array/map
列的长度(元素个数)。sort_array(col,asc=True)
: 对array
列中的array
进行排序(排序的方式是自然的顺序)参数:
col
:一个字符串或者Column
, 指定一个array
列asc
: 如果为True
,则是升序;否则是降序
spark_partition_id()
:返回一个partition ID
列该方法产生的结果依赖于数据划分和任务调度,因此是未确定结果的。
struct(*cols)
:创建一个新的struct
列。参数:
cols
:一个字符串列表(指定了列名),或者一个Column
列表
示例:
xxxxxxxxxx
df.select(struct('age', 'name').alias("struct")).collect() # [Row(struct=Row(age=2, name=u'Alice')), Row(struct=Row(age=5, name=u'Bob'))]
to_json(col,options={})
:将包含StructType
或者Arrytype
的StructType
转换为json
字符串。如果遇到不支持的类型,则抛出异常。参数:
col
:一个字符串或者Column
,表示待转换的列options
:转换选项。它支持和json datasource
同样的选项
udf(f=None,returnType=StringType)
:根据用户定义函数(UDF
) 来创建一列。参数:
f
:一个python
函数,它接受一个参数returnType
:一个pyspqrk.sql.types.DataType
类型,表示udf
的返回类型
示例:
xxxxxxxxxx
from pyspark.sql.types import IntegerType slen = udf(lambda s: len(s), IntegerType()) df.select(slen("name").alias("slen_name"))
when(condition,value)
: 对一系列条件求值,返回其中匹配的哪个结果。如果
Column.otherwise()
未被调用,则当未匹配时,返回None
;如果Column.otherwise()
被调用,则当未匹配时,返回otherwise()
的结果。参数:
condition
:一个布尔列value
:一个字面量值,或者一个Column
示例:
xxxxxxxxxx
df.select(when(df['age'] == 2, 3).otherwise(4).alias("age")).collect() # [Row(age=3), Row(age=4)]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论