文档章节

Spark: SchemaRDD隐式转换

Ryan-瑞恩
 Ryan-瑞恩
发布于 2015/03/11 22:15
字数 577
阅读 53
收藏 0
点赞 0
评论 0

SchemaRDD在Spark SQL中已经被我们使用到,这篇文章简单地介绍一下如果将标准的RDD(org.apache.spark.rdd.RDD)转换成SchemaRDD,并进行SQL相关的操作。

0

  这是因为people是普通的RDD,而registerTempTable函数不属于RDD类,只有通过SchemaRDD的实例才可以调用,所以这么调用会出现错误,解决办法有两个:
  (1)registerTempTable函数是SQLContext类中的,所以我们可以将people转换成SchemaRDD,如下:

01	/**
02	 * User: 过往记忆
03	 * Date: 14-12-16
04	 * Time: 下午10:16
05	 * bolg: http://www.iteblog.com
06	 * 本文地址:http://www.iteblog.com/archives/1224
07	 * 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货
08	 * 过往记忆博客微信公共帐号:iteblog_hadoop
09	 */
10	scala> val peopleSchema =sqlContext.createSchemaRDD(people)
11	peopleSchema:org.apache.spark.sql.SchemaRDD =
12	SchemaRDD[29] at RDD at SchemaRDD.scala:103
13	==Query Plan ==
14	==Physical Plan ==
15	ExistingRdd [name#4,age#5], MapPartitionsRDD[28] at
16	 mapPartitions at basicOperators.scala:217
17	 
18	scala> peopleSchema.registerTempTable("people")
19	warning:there were 1deprecation warning(s); re-run with-deprecation fordetails


  这么调用就可以将people转成SchemaRDD。
  (2)、上面的方法是通过显示地调用sqlContext.createSchemaRDD将普通的RDD转成SchemaRDD。其实我们还可以通过Scala的隐式语法来进行转换。我们先来看看createSchemaRDD函数的定义

1	/**
2	* Creates a SchemaRDD from an RDD of case classes.
3	*
4	* @group userf
5	*/
6	implicitdefcreateSchemaRDD[A <:Product:TypeTag](rdd:RDD[A]) ={
7	    SparkPlan.currentContext.set(self)
8	    newSchemaRDD(this, SparkLogicalPlan(ExistingRdd.fromProductRdd(rdd))(self))
9	}

  在定义createSchemaRDD的时候用到了implicit 关键字,所以我们在使用的时候可以通过下面语句使用

1	scala> import sqlContext.createSchemaRDD
2	import sqlContext.createSchemaRDD
3	 
4	scala> people.registerAsTable("people")
5	warning:there were 1deprecation warning(s); re-run with-deprecation fordetails

  这样就隐身地将people转换成SchemaRDD了。这是因为Spark可以隐式地将包含case class的RDD转换成SchemaRDD。

  关于什么是SchemaRDD,官方文档将的很详细:
  An RDD of [[Row]] objects that has an associated schema. In addition to standard RDD functions, SchemaRDDs can be used in relational queries。也就是包含了Row对象以及模式的RDD。它继承自标准的RDD类,所以拥有标准RDD类的所有方法;并且可以用于关系性数据库的查询在中。

© 著作权归作者所有

共有 人打赏支持
Ryan-瑞恩
粉丝 132
博文 208
码字总数 164469
作品 0
西安
后端工程师
Spark2.1.0之基础知识

在阅读本文之前,读者最好已经阅读了《Spark2.1.0之初识Spark》一文,本文将对Spark的基础知识进行介绍。但在此之前,读者先跟随本人来一次简单的时光穿梭,最后还将对Java与Scala在语言上进...

beliefer ⋅ 05/24 ⋅ 0

Spark初识入门Core (一)

Spark初识入门core (一) 标签(空格分隔): Spark的部分 一:spark 简介 1.1 spark 的来源 Hive Storm Mahout Griph Spark Core Spark SQL Spark Streaming Spark ML Spark GraphX Spark......

flyfish225 ⋅ 05/07 ⋅ 0

Spark初识入门core (一)

Spark初识入门core (一) 标签(空格分隔): Spark的部分 一:spark 简介 1.1 spark 的来源 Hive Storm Mahout Griph Spark Core Spark SQL Spark Streaming Spark ML Spark GraphX Spark......

flyfish225 ⋅ 05/07 ⋅ 0

Spark 的Core深入(二)

Spark 的 Core 深入(二) 标签(空格分隔): Spark的部分 一、日志清洗的优化: 1.1 日志清洗有脏数据问题 rdd.partitions.length rdd.cacherdd.count 一个分区默认一个task 分区去处理默认...

flyfish225 ⋅ 05/08 ⋅ 0

利用KNIME建立Spark Machine learning模型 2:泰坦尼克幸存预测

本文利用KNIME基于Spark决策树模型算法,通过对泰坦尼克的包含乘客及船员的特征属性的训练数据集进行训练,得出决策树幸存模型,并利用测试数据集对模型进行测试。 1、从Kaggle网站下载训练...

forestwater ⋅ 05/09 ⋅ 0

Spark Streaming入门

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文将帮助您使用基于HBase的Apache Spark Streaming。Spark Streaming是Spark API核心的一个扩展,支持连续的数据流处理。 什么...

腾讯云加社区 ⋅ 05/16 ⋅ 0

Spark笔记整理(二):RDD与spark核心概念名词

[TOC] Spark RDD 非常基本的说明,下面一张图就能够有基本的理解: Spark RDD基本说明 1、Spark的核心概念是RDD (resilient distributed dataset,弹性分布式数据集),指的是一个只读的,可分...

xpleaf ⋅ 04/25 ⋅ 0

你不能错过的 spark 学习资源

1. 书籍,在线文档 2. 网站 3. Databricks Blog 4. 文章,博客 5. 视频

u012608836 ⋅ 04/12 ⋅ 0

Spark2.0-RDD分区原理分析

Spark分区原理分析 介绍 分区是指如何把RDD分布在spark集群的各个节点的操作。以及一个RDD能够分多少个分区。 一个分区是大型分布式数据集的逻辑块。 那么思考一下:分区数如何映射到spark的...

xiaomin0322 ⋅ 06/06 ⋅ 0

【DataMagic】如何在万亿级别规模的数据量上使用Spark

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载。 作者:张国鹏 | 腾讯 运营开发工程师 一、前言 Spark作为大数据计算引擎,凭借其快速、...

⋅ 04/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 20分钟前 ⋅ 0

centos7 git安装

由于centos中的源仓库中git不是最新版本,需要进行源码安装。 1、查看yum仓库git信息 [root@iZm5e3d4r5i5ml889vh6esZ zh]# yum info gitLoaded plugins: fastestmirrorLoading mirror s...

xixingzhe ⋅ 29分钟前 ⋅ 0

input file 重复上传同一张图片失效的解决办法

解决办法 方法一:来回切换input[type='file']的type属性值,可以是‘text’,'button','button'....,然后再切换回来‘file’ 方法二:每次取消图片预览后,重置input[type='file']的value的...

时刻在奔跑 ⋅ 30分钟前 ⋅ 0

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 34分钟前 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 36分钟前 ⋅ 0

Redux的一些手法记录

Redux Redux的基本概念见另一篇文。 这里记录一下Redux在项目中的实际操作的手法。 actions 首先定义action.js,actions的type,可以另起一个action-type.js文件。 action-type.js用来存...

LinearLaw ⋅ 37分钟前 ⋅ 0

android 手势检测(左右滑动、上下滑动)

GestureDetector类可以让我们快速的处理手势事件,如点击,滑动等。 使用GestureDetector分三步: 1. 定义GestureDetector类 2. 初始化手势类,同时设置手势监听 3. 将touch事件交给gesture...

王先森oO ⋅ 51分钟前 ⋅ 0

java 方法的执行时间监控 设置超时(Future 接口)

java 方法的执行时间监控 设置超时(Future 接口) import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor......

青峰Jun19er ⋅ 56分钟前 ⋅ 0

一名开源小白的Apache成长自述

今天收到了来自Apache Vote我成为Serviceomb项目Committer的邮件,代表自己的贡献得到了充分的肯定;除了感谢团队的给力支持,我更希望将自己的成长经历——如何践行Apache Way的心得介绍给大...

微服务框架 ⋅ 58分钟前 ⋅ 0

vim介绍、颜色显示和移动光标、一般模式下复制、剪切和粘贴

1.vim 是 vi 的升级版 vim 是带有颜色显示的 mini安装的系统,一般都不带有vim [root@aminglinux-128 ~]# yum install -y vim-enhanced已加载插件:fastestmirror, langpacksLoading mir...

oschina130111 ⋅ 58分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部