dataFrame.registerTempTable(tableName);
最近在使用SparkSQL时想到1万条数据注册成临时表和1亿条数据注册成临时表时,效率上是否会有很大的差距,也对DataFrame注册成临时表到底做了哪些比较好奇,拿来源码拜读了下相关部分,记录一下。
临时表的生命周期是和创建该DataFrame的SQLContext有关系的,SQLContext生命周期结束,该临时表的生命周期也结束了
DataFrame.scala相关源码
/**
* Registers this [[DataFrame]] as a temporary table using the given name. The lifetime of this
* temporary table is tied to the [[SQLContext]] that was used to create this DataFrame.
*
* @group basic
* @since 1.3.0
*/
def registerTempTable(tableName: String): Unit = {
sqlContext.registerDataFrameAsTable(this, tableName)
}
DataFrame中的registerTempTable调用SQLContext中的registerDataFrameAsTable,
SQLContext中使用SimpleCatalog类去实现Catalog接口中的registerTable方法.
SQLContext.scala相关源码
@transient
protected[sql] lazy val catalog: Catalog = new SimpleCatalog(conf)
/**
* Registers the given [[DataFrame]] as a temporary table in the catalog. Temporary tables exist
* only during the lifetime of this instance of SQLContext.
*/
private[sql] def registerDataFrameAsTable(df: DataFrame, tableName: String): Unit = {
catalog.registerTable(Seq(tableName), df.logicalPlan)
}
在SimpleCatalog中定义了Map,registerTable中按tableIdentifier为key,logicalPlan为Value注册到名为tables的map中
Catalog.scala相关源码
val tables = new mutable.HashMap[String, LogicalPlan]()
override def registerTable(
tableIdentifier: Seq[String],
plan: LogicalPlan): Unit = {
val tableIdent = processTableIdentifier(tableIdentifier)
tables += ((getDbTableName(tableIdent), plan))
}
protected def processTableIdentifier(tableIdentifier: Seq[String]): Seq[String] = {
if (conf.caseSensitiveAnalysis) {
tableIdentifier
} else {
tableIdentifier.map(_.toLowerCase)
}
}
protected def getDbTableName(tableIdent: Seq[String]): String = {
val size = tableIdent.size
if (size <= 2) {
tableIdent.mkString(".")
} else {
tableIdent.slice(size - 2, size).mkString(".")
}
}
阅读以上代码,最终registerTempTable是将表名(或表的标识)和对应的逻辑计划加载到Map中,并随着SQLContext的消亡而消亡
相关推荐
概念上相当于关系数据库中一张表或在R / Python中的data frame数据结构,但DataFrame有丰富的优化。在Spark 1.3之前,核心的新类型为RDD-schemaRDD,现改为DataFrame。spark 通过DataFrame操作大量的数据源,包括外部...
1.手动转换 2.样例类转换(推荐) 3.通过API方式转换 1.使用内嵌的Hive 2.使用外置的Hive
DataFrame操作数据集[BeijingPM20100101_20151231.rar]
倒排索引源码 java 车间火花实践 在本次研讨会中,练习的重点是使用 和 API,以及数据处理。 练习在 Java 和我的 github 帐户中都可用(这里是 java)。 你只需要克隆项目就可以了! 如果您需要帮助,请查看解决方案...
SparkSQL通过Hive创建DataFrame问题分析 问题一 Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'stu' not found in database 'default'; 分析:确实没有临时表View,...
SparkSQL的数据结构DataFrame构建方式
spark课程pdf集合,SparkSQL与DataFrame,Spark MLlib基础
目录介绍Pandas中DataFrame基本函数整理(全)构造数据框属性和数据类型转换索引和迭代二元运算函数应用&分组&窗口描述统计学从新索引&选取&标签操作处理缺失值从新定型&排序&转变形态Combining& joining&merging...
例子中定义了多个List数据集合,包括用户信息,订单信息,用户订单信息,将List对象生成DataFrame,使用SparkSQL查询将多个DataFrame合成一个DataFrame,使用Scala语言编写。
Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成...
Python 将DataFrame数据转换成列表 Python源码Python 将DataFrame数据转换成列表 Python源码Python 将DataFrame数据转换成列表 Python源码Python 将DataFrame数据转换成列表 Python源码Python 将DataFrame数据转换成...
lg大数据高薪训练营 HBase、 Java9 、Java10 、MySQL优化 、JVM原理 、JUC多线程、 CDH版Hadoop Impala、 Flume 、Sqoop、 Azkaban、 Oozie、 HUE、 Kettle、 ...· SparkSQL · DataFrame · DataSet · 自定义
Python 将DataFrame数据转成字典 Python源码Python 将DataFrame数据转成字典 Python源码Python 将DataFrame数据转成字典 Python源码Python 将DataFrame数据转成字典 Python源码Python 将DataFrame数据转成字典 ...
简单一个示例,演示Spark中DataFrame的创建与操作
熊猫数据框
dataframe是pandas中的一种数据类型 list是python的基本数据结构,两者之间可以进行转化 代码示例: import numpy as np import pandas as pd df = pd.DataFrame( data={ "A":1.0, "B":pd.Timestamp("20220121"),...
今天小编就为大家分享一篇DataFrame:通过SparkSql将scala类转为DataFrame的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
python学习之路:pandas中的series和dataframe.xlsx
您可能感兴趣的文章:python 给DataFrame增加index行名和columns列名的实现方法用pandas中的DataFrame时选取行或列的方法python中pandas.DataFrame对行与列求和及添加新行与列示例pandas数据处理基础之筛选