共計(jì) 1768 個字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān)怎么實(shí)現(xiàn) Spark SchemaRDD 隱式轉(zhuǎn)換,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
SchemaRDD 在 Spark SQL 中已經(jīng)被我們使用到,這篇文章簡單地介紹一下如果將標(biāo)準(zhǔn)的 RDD(org.apache.spark.rdd.RDD) 轉(zhuǎn)換成 SchemaRDD,并進(jìn)行 SQL 相關(guān)的操作。
01 /** 這是因?yàn)?people 是普通的 RDD,而 registerTempTable 函數(shù)不屬于 RDD 類,只有通過 SchemaRDD 的實(shí)例才可以調(diào)用,所以這么調(diào)用會出現(xiàn)錯誤,解決辦法有兩個:
(1)registerTempTable 函數(shù)是 SQLContext 類中的,所以我們可以將 people 轉(zhuǎn)換成 SchemaRDD,如下:
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 的技術(shù)博客,大量的干貨
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
這么調(diào)用就可以將 people 轉(zhuǎn)成 SchemaRDD。
(2)、上面的方法是通過顯示地調(diào)用 sqlContext.createSchemaRDD 將普通的 RDD 轉(zhuǎn)成 SchemaRDD。其實(shí)我們還可以通過 Scala 的隱式語法來進(jìn)行轉(zhuǎn)換。我們先來看看 createSchemaRDD 函數(shù)的定義
1 /**
2 * Creates a SchemaRDD from an RDD of case classes.
4 * @group userf
6 implicitdefcreateSchemaRDD[A :Product:TypeTag](rdd:RDD[A]) ={7 SparkPlan.currentContext.set(self)
8 newSchemaRDD(this, SparkLogicalPlan(ExistingRdd.fromProductRdd(rdd))(self))
9 }
在定義 createSchemaRDD 的時候用到了 implicit 關(guān)鍵字,所以我們在使用的時候可以通過下面語句使用
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 轉(zhuǎn)換成 SchemaRDD 了。這是因?yàn)?Spark 可以隱式地將包含 case class 的 RDD 轉(zhuǎn)換成 SchemaRDD。
看完上述內(nèi)容,你們對怎么實(shí)現(xiàn) Spark SchemaRDD 隱式轉(zhuǎn)換有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。