怎么实现Spark SchemaRDD隐式转换
今天就跟大家聊聊有關怎么實現Spark SchemaRDD隱式轉換,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
SchemaRDD在Spark SQL中已經被我們使用到,這篇文章簡單地介紹一下如果將標準的RDD(org.apache.spark.rdd.RDD)轉換成SchemaRDD,并進行SQL相關的操作。
01/**
這是因為people是普通的RDD,而registerTempTable函數不屬于RDD類,只有通過SchemaRDD的實例才可以調用,所以這么調用會出現錯誤,解決辦法有兩個:
(1)registerTempTable函數是SQLContext類中的,所以我們可以將people轉換成SchemaRDD,如下:
02*User:過往記憶03*Date:14-12-1604*Time:下午10:1605*bolg:http://www.iteblog.com06*本文地址:http://www.iteblog.com/archives/122407*過往記憶博客,專注于hadoop、hive、spark、shark、flume的技術博客,大量的干貨08*過往記憶博客微信公共帳號:iteblog_hadoop09*/10scala>valpeopleSchema=sqlContext.createSchemaRDD(people)11peopleSchema:org.apache.spark.sql.SchemaRDD=12SchemaRDD[29]atRDDatSchemaRDD.scala:10313==QueryPlan==14==PhysicalPlan==15ExistingRdd[name#4,age#5],MapPartitionsRDD[28]at16mapPartitionsatbasicOperators.scala:2171718scala>peopleSchema.registerTempTable("people")19warning:therewere1deprecationwarning(s);re-runwith-deprecationfordetails
這么調用就可以將people轉成SchemaRDD。
(2)、上面的方法是通過顯示地調用sqlContext.createSchemaRDD將普通的RDD轉成SchemaRDD。其實我們還可以通過Scala的隱式語法來進行轉換。我們先來看看createSchemaRDD函數的定義
1/**2*CreatesaSchemaRDDfromanRDDofcaseclasses.3*4*@groupuserf5*/6implicitdefcreateSchemaRDD[A<:Product:TypeTag](rdd:RDD[A])={7SparkPlan.currentContext.set(self)8newSchemaRDD(this,SparkLogicalPlan(ExistingRdd.fromProductRdd(rdd))(self))9}
在定義createSchemaRDD的時候用到了implicit 關鍵字,所以我們在使用的時候可以通過下面語句使用
1scala>importsqlContext.createSchemaRDD2importsqlContext.createSchemaRDD34scala>people.registerAsTable("people")5warning:therewere1deprecationwarning(s);re-runwith-deprecationfordetails
這樣就隱身地將people轉換成SchemaRDD了。這是因為Spark可以隱式地將包含case class的RDD轉換成SchemaRDD。
看完上述內容,你們對怎么實現Spark SchemaRDD隱式轉換有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
總結
以上是生活随笔為你收集整理的怎么实现Spark SchemaRDD隐式转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JStorm原理以及应用场景是怎样的
- 下一篇: 蔚来手机入网工信部!发布临近 要正面硬刚