数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
三、DataFrame 创建
- 在一个
SparkSession
中,应用程序可以从一个已经存在的RDD
、HIVE
表、或者spark
数据源中创建一个DataFrame
3.1 从列表创建
未指定列名:
xxxxxxxxxx
l = [('Alice', 1)] spark_session.createDataFrame(l).collect()结果为:
xxxxxxxxxx
[Row(_1=u'Alice', _2=1)] #自动分配列名指定列名:
xxxxxxxxxx
l = [('Alice', 1)] spark_session.createDataFrame(l, ['name', 'age']).collect()结果为:
xxxxxxxxxx
[Row(name=u'Alice', age=1)]通过字典指定列名:
xxxxxxxxxx
d = [{'name': 'Alice', 'age': 1}] spark_session.createDataFrame(d).collect()结果为:
xxxxxxxxxx
[Row(age=1, name=u'Alice')]
3.2 从 RDD 创建
未指定列名:
xxxxxxxxxx
rdd = sc.parallelize([('Alice', 1)]) spark_session.createDataFrame(rdd).collect()结果为:
xxxxxxxxxx
[Row(_1=u'Alice', _2=1)] #自动分配列名指定列名:
xxxxxxxxxx
rdd = sc.parallelize([('Alice', 1)]) spark_session.createDataFrame(rdd, ['name', 'age']).collect()结果为:
xxxxxxxxxx
[Row(name=u'Alice', age=1)]通过
Row
来创建:xxxxxxxxxx
from pyspark.sql import Row Person = Row('name', 'age') rdd = sc.parallelize([('Alice', 1)]).map(lambda r: Person(*r)) spark_session.createDataFrame(rdd, ['name', 'age']).collect()结果为:
xxxxxxxxxx
[Row(name=u'Alice', age=1)]指定
schema
:xxxxxxxxxx
from pyspark.sql.types import * schema = StructType([ StructField("name", StringType(), True), StructField("age", IntegerType(), True)]) rdd = sc.parallelize([('Alice', 1)]) spark_session.createDataFrame(rdd, schema).collect()结果为:
xxxxxxxxxx
[Row(name=u'Alice', age=1)]通过字符串指定
schema
:xxxxxxxxxx
rdd = sc.parallelize([('Alice', 1)]) spark_session.createDataFrame(rdd, "a: string, b: int").collect()结果为:
xxxxxxxxxx
[Row(name=u'Alice', age=1)]如果只有一列,则字符串
schema
为:xxxxxxxxxx
rdd = sc.parallelize([1]) spark_session.createDataFrame(rdd, "int").collect()结果为:
xxxxxxxxxx
[Row(value=1)]
3.3 从 pandas.DataFrame 创建
使用方式:
xxxxxxxxxx
df = pd.DataFrame({'a':[1,3,5],'b':[2,4,6]}) spark_session.createDataFrame(df).collect()结果为:
xxxxxxxxxx
[Row(a=1, b=2), Row(a=3, b=4), Row(a=5, b=6)]
3.4 从数据源创建
从数据源创建的接口是
DataFrameReader
:xxxxxxxxxx
reader = spark_session.read另外,也可以不使用
API
,直接将文件加载到DataFrame
并进行查询:xxxxxxxxxx
df = spark_session.sql("SELECT * FROM parquet.`examples/src/main/resources/users.parquet`")
3.4.1 通用加载
设置数据格式:
.format(source)
。- 返回
self
xxxxxxxxxx
df = spark_session.read.format('json').load('python/test_support/sql/people.json')- 返回
设置数据
schema
:.schema(schema)
。- 返回
self
- 某些数据源可以从输入数据中推断
schema
。一旦手动指定了schema
,则不再需要推断。
- 返回
加载:
.load(path=None, format=None, schema=None, **options)
参数:
path
:一个字符串,或者字符串的列表。指出了文件的路径format
:指出了文件类型。默认为parquet
(除非另有配置spark.sql.sources.default
)schema
:输入数据的schema
,一个StructType
类型实例。options
:其他的参数
返回值:一个
DataFrame
实例示例:
xxxxxxxxxx
spark_session.read.format('json').load(['python/test_support/sql/people.json', 'python/test_support/sql/people1.json'])
3.4.2 专用加载
.csv()
:加载csv
文件,返回一个DataFrame
实例xxxxxxxxxx
.csv(path, schema=None, sep=None, encoding=None, quote=None, escape=None, comment=None, header=None, inferSchema=None, ignoreLeadingWhiteSpace=None, ignoreTrailingWhiteSpace=None, nullValue=None, nanValue=None, positiveInf=None, negativeInf=None, dateFormat=None, timestampFormat=None, maxColumns=None, maxCharsPerColumn=None, maxMalformedLogPerPartition=None, mode=None, columnNameOfCorruptRecord=None, multiLine=None).jdbc()
:加载数据库中的表xxxxxxxxxx
.jdbc(url, table, column=None, lowerBound=None, upperBound=None, numPartitions=None, predicates=None, properties=None)参数:
url
:一个JDBC URL
,格式为:jdbc:subprotocol:subname
table
:表名column
:列名。该列为整数列,用于分区。如果该参数被设置,那么numPartitions、lowerBound、upperBound
将用于分区从而生成where
表达式来拆分该列。lowerBound
:column
的最小值,用于决定分区的步长upperBound
:column
的最大值(不包含),用于决定分区的步长numPartitions
:分区的数量predicates
:一系列的表达式,用于where
中。每一个表达式定义了DataFrame
的一个分区properties
:一个字典,用于定义JDBC
连接参数。通常至少为:{ 'user' : 'SYSTEM', 'password' : 'mypassword'}
返回:一个
DataFrame
实例
.json()
:加载json
文件,返回一个DataFrame
实例xxxxxxxxxx
.json(path, schema=None, primitivesAsString=None, prefersDecimal=None, allowComments=None, allowUnquotedFieldNames=None, allowSingleQuotes=None, allowNumericLeadingZero=None, allowBackslashEscapingAnyCharacter=None, mode=None, columnNameOfCorruptRecord=None, dateFormat=None, timestampFormat=None, multiLine=None)示例:
xxxxxxxxxx
spark_session.read.json('python/test_support/sql/people.json') # 或者 rdd = sc.textFile('python/test_support/sql/people.json') spark_session.read.json(rdd).orc()
:加载ORC
文件,返回一个DataFrame
实例xxxxxxxxxx
.orc(path)示例:
xxxxxxxxxx
spark_session.read.orc('python/test_support/sql/orc_partitioned').parquet()
:加载Parquet
文件,返回一个DataFrame
实例.parquet(*paths)
示例:
xxxxxxxxxx
spark_session.read.parquet('python/test_support/sql/parquet_partitioned').table()
: 从table
中创建一个DataFrame
xxxxxxxxxx
.table(tableName)示例:
xxxxxxxxxx
df = spark_session.read.parquet('python/test_support/sql/parquet_partitioned') df.createOrReplaceTempView('tmpTable') spark_session.read.table('tmpTable').text()
:从文本中创建一个DataFrame
xxxxxxxxxx
.text(paths)它不同于
.csv()
,这里的DataFrame
只有一列,每行文本都是作为一个字符串。示例:
xxxxxxxxxx
spark_session.read.text('python/test_support/sql/text-test.txt').collect() #结果为:[Row(value=u'hello'), Row(value=u'this')]
3.5 从 Hive 表创建
spark SQL
还支持读取和写入存储在Apache Hive
中的数据。但是由于Hive
具有大量依赖关系,因此这些依赖关系不包含在默认spark
版本中。- 如果在类路径中找到
Hive
依赖项,则Spark
将会自动加载它们 - 这些
Hive
的依赖关系也必须存在于所有工作节点上
- 如果在类路径中找到
配置:将
hive-site.xml
、core-site.html
(用于安全配置)、hdfs-site.xml
(用户HDFS
配置) 文件放在conf/
目录中完成配置。当使用
Hive
时,必须使用启用Hive
支持的SparkSession
对象(enableHiveSupport
)- 如果未部署
Hive
,则开启Hive
支持不会报错
- 如果未部署
当
hive-site.xml
未配置时,上下文会自动在当前目录中创建metastore_db
,并创建由spark.sql.warehouse.dir
指定的目录访问示例:
xxxxxxxxxx
from pyspark.sql import SparkSession spark_sess = SparkSession \ .builder \ .appName("Python Spark SQL Hive integration example") \ .config("spark.sql.warehouse.dir", '/home/xxx/yyy/') \ .enableHiveSupport() \ .getOrCreate() spark_sess.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive") spark_sess.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src") spark.sql("SELECT * FROM src").show()创建
Hive
表时,需要定义如何向/从文件系统读写数据,即:输入格式、输出格式。还需要定义该表的数据的序列化与反序列化。可以通过在
OPTIONS
选项中指定这些属性:xxxxxxxxxx
spark_sess.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive OPTIONS(fileFormat 'parquet')")可用的选项有:
fileFormat
:文件格式。目前支持6种文件格式:'sequencefile'、'rcfile'、'orc'、'parquet'、'textfile'、'avro'
。inputFormat,outputFormat
:这两个选项将相应的InputFormat
和OutputFormat
类的名称指定为字符串文字,如'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
- 这两个选项必须成对出现
- 如果已经制定了
fileFormat
,则无法指定它们
serde
:该选项指定了serde
类的名称- 如果给定的
fileFormat
已经包含了serde
信息(如何序列化、反序列化的信息),则不要指定该选项 - 目前的
sequencefile、textfile、rcfile
不包含serde
信息,因此可以使用该选项
- 如果给定的
fieldDelim, escapeDelim, collectionDelim, mapkeyDelim, lineDelim
:这些选项只能与textfile
文件格式一起使用,它们定义了如何将分隔的文件读入行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论