Spark学习手札(一):SparkSQL的registerAsTable与registerTempTable

在学习SparkSQL时遇到版本差异导致的注册表问题,文章详细记录了解决过程。Spark1.3之前使用registerAsTable,而1.6版本中应使用registerTempTable。由于import包的不同,最终使用qlContext.implicits._成功注册表。
摘要由CSDN通过智能技术生成

今天在学习SparkSQL时,按照教程上的代码,在注册数据库表时,使用registerAsTable函数注册table:
教程源码:

val sqlContext=new org.apache.spark.sql.SQLContext(sc)
import sqlContext._
case class Person(name:String,age:Int)
val people=sc.textFile("File:/home/hadoop/examples/people.txt").map(_.split(",")).map(p=>Person(p(0),p(1).trim().toInt)).toDF()
people.registerAsTable("people")
val teenagers = sqlContext.sql("select name,age from people")
teenagers.map { t => t(0)+" "+t(1) } collect() foreach { println }

但是当运行到people.registerAsTable(“people”)时,提示如下问题:
registerAsTable函数报错
经过查找相关文章资料,终于找到问题的解决方法,故在此做个记录,以备后患。
原因分析:
(1)、函数不同:
由于源码教程使用的是Spark1.3之前的版本,而我使用的是Spark1.6版本,版本不同,所以相应的函数也就不一样了,在Spark1.3之后,注册table使用的是registerTempTable,在Spark1.6.1Documentation的DataFrame类目录下查找该函数可以得到以下解释:
registerTempTable函数解释
从函数解释中可以知道,这个函数在Spark1.3之后替代了registerAsTable函数。
找到这个原因之后,将函数改为registerTempTable继续运行,此时源码如下:

val sqlContext=new org.apache.spark.sql.SQLContext(sc)
import sqlContext._
case class Person(name:String,age:Int)
val people=sc.textFile("File:/home/hadoop/examples/people.txt").map(_.split(",")).map(p=>Person(p(0),p(1).trim().toInt)).toDF()
people.registerTempTable("people")
val teenagers = sqlContext.sql("select name,age from people")
teenagers.map { t => t(0)+" "+t(1) } collect() foreach { println }

但是当运行到people.register

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值