SparkSQL之更改表结构
本文篇幅较短,内容源于自己在使用SparkSQL时碰到的一个小问题,因为在之后的数据处理过程中多次使用,所以为了加深印象,在此单独成文,以便回顾。
场景
在使用SparkSQL进行数据处理时,碰到这样一种情况:需要更改DataFrame当中某个字段的类型。简而言之,就是需要更改SparkSQL的表结构。出于学习的目的,做了一个简单的Demo。下面来看看这个实例。
Example
......
......
此处省略相关jar包的引入
首先使用sparkSQL的jsonFile加载HDFS上的一个文件(此步在此直接省略了),得到如下的表结构:
scala> dfs.printSchema
root
 |-- name: string (nullable = true)
 |-- desc: string (nullable = true)
 |-- click: double (nullable = true)
 |-- view: double(nullable = true)
目的:将click和view转成的类型转成Long。
操作如下:
首先需要定义一个函数,将表内的`Double`类型转为`Long`类型,函数如下:
val toLong = udf[Long, Double](_.toLong)
然后使用withColumn变换字段类型,代码如下:
val dfs2 = dfs.withColumn("click", toLong(dfs("click"))).withColumn("view", toLong(dfs("view")))
使用printSchema查看表结构:

另一种转换方式:
dfs0306.withColumn("time",dfs0306("time").cast("Long"))

OK,一个简单的表结构变换便完成了,又get了一个小技巧。
SparkSQL之更改表结构的更多相关文章
- MSSQL 更改表结构
		
更改表结构: alter TABLE 表1 ALTER COLUMN 列名1 NCHAR(40)
 - MySQL OSC(在线更改表结构)原理
		
1 OSC介绍 在我们的数据库操作中,更改表结构是一个常见的操作,而当我们的表数据量非常大时,我们更改表结构的时间是非 常的长,并且在跟改期间,会生成一个互斥锁,阻塞对整个表的所有操作,这样,对于我们 ...
 - [linux][mysql] 命令更改表结构:添加、删除、修改字段、调整字段顺序
		
原文出处:http://www.phpernote.com/MySQL/1120.html 查看表结构: desc tabl_name; show columns fromtable_name: 常用 ...
 - MYSQL分库分表和不停机更改表结构
		
在MYSQL分库分表中我们一般是基于数据量比较大的时间对mysql数据库一种优化的做法,下面我简单的介绍一下mysql分表与分库的简单做法. .分库分表 很明显,一个主表(也就是很重要的表,例如用户表 ...
 - Navicat图形更改表结构的时,设置外键时出现1452错误
		
原文地址:http://www.mamicode.com/info-detail-1296600.html 提示1452错误,如下图所示. 然后百度了一下,得到了一个靠谱的答案: 这是因为表设置了外键 ...
 - mysql更改表结构:添加、删除、修改字段、调整字段顺序
		
添加字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` ( ...
 - gh-ost 号称是不需要触发器(Triggerless)支持的在线更改表结构的工具
		
https://segmentfault.com/a/1190000006158503?utm_source=tuicool&utm_medium=referral
 - (转)pt-online-schema-change在线修改表结构
		
原文:http://www.ywnds.com/?p=4442 一.背景 MySQL大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响 ...
 - oracle ogg 单实例双向-新增表,修改表结构(oracle-oracle
		
--新增inset测试--dept 表结构orcl,ogg都存在,数据相同(但是rep1配置文件没有添加) SCOTT@ orcl ,'hongquan','BBA'); row created. S ...
 
随机推荐
- 在网站中嵌入VideoJs视频播放器
			
一个博客难免需要引用视频来说明内容,但想要自己来实现一个视频播放器是不是一时半会就能完成的,更重要的是这需要对视频播放技术有一定的了解.于是自然而然的有人会想到开源项目.一个不错的选择便是video. ...
 - 【JBPM4】获取任务
			
示例代码: <?xml version="1.0" encoding="UTF-8"?> <process name="test&q ...
 - jquery扩展插件,让demo元素也可以resize
			
(function($, h, c) { var a = $([]), e = $.resize = $.extend($.resize, {}), i, k = "setTimeout&q ...
 - bzoj 1449 费用流
			
思路:先把没有进行的场次规定双方都为负,对于x胜y负 变为x + 1胜 y - 1 负所需要的代价为 2 * C[ i ] * x - 2 * D[ i ] * y + C[ i ] + D[ i ...
 - 洛谷P3038 牧草种植 [树链剖分]
			
题目传送门 牧草种植 题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirec ...
 - HttpClient不同版本超时时间的设置
			
引自 https://www.cnblogs.com/hisunhyx/p/5028391.html 3.X是这样的 HttpClient client=new DefaultHttpClient() ...
 - spring面试题 对DI , AOP概念的理解
			
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监 ...
 - BZOJ 2395 [Balkan 2011]Timeismoney(最小乘积生成树)
			
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2395 [题目大意] 给出一张无向图,每条边上有a,b两个值,求生成树, 使得suma* ...
 - 【计算几何】【推导】【补集转化】AtCoder Regular Contest 082 E - ConvexScore
			
题意:平面上给你N个点.对于一个“凸多边形点集”(凸多边形点集被定义为一个其所有点恰好能形成凸多边形的点集)而言,其对答案的贡献是2^(N个点内在该凸多边形点集形成的凸包内的点数 - 该凸多边形点集的 ...
 - Codeforces Round #345 (Div. 2) E. Table Compression 并查集
			
E. Table Compression 题目连接: http://www.codeforces.com/contest/651/problem/E Description Little Petya ...