這篇文章主要講解了“Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法”吧!
為可克達(dá)拉等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及可克達(dá)拉網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、可克達(dá)拉網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
反射 把schema信息全部定義在case class 類(lèi)里面
package core import org.apache.spark.sql.SparkSession import org.apache.spark.sql.types.StructType object Test { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("Test") .master("local[2]") .getOrCreate() val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt") import spark.implicits._ val result = mess.map(_.split(",")).map(x => Info(x(0).toInt,x(1),x(2).toInt)).toDF() // result.map(x => x(0)).show() //在1.x 版本是可以的 在2.x不可以需要價(jià)格rdd result.rdd.map(x => x(0)).collect().foreach(println) result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println) } } case class Info(id:Int,name:String,age:Int)
注意2.2版本以前 類(lèi)的構(gòu)造方法參數(shù)有限 在2.2后沒(méi)有限制了
制定scheme信息 就是編程的方式 作用到Row 上面
從原有的RDD轉(zhuǎn)化 ,類(lèi)似于textFile 一個(gè)StructType匹配Row里面的數(shù)據(jù)結(jié)構(gòu)(幾列),就是幾個(gè)StructField 通過(guò)createDataFrame 把schema與RDD關(guān)聯(lián)上
StructField 可以理解為一列 StructType 包含 1-n 個(gè)StructField
package core import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType} import org.apache.spark.sql.{Row, SparkSession} object TestRDD2 { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("TestRDD2") .master("local[2]") .getOrCreate() val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt") val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt)) //工作中這樣寫(xiě) val structType = new StructType( Array( StructField("id", IntegerType, true), StructField("name", StringType, true), StructField("age", IntegerType, true) ) ) val schema = StructType(structType) val info = spark.createDataFrame(result,schema) info.show() } }
自己定義的schema信息與Row中的信息不匹配 val result = mess.map(_.split(",")).map(x => Row(x(0), x(1), x(2))) //工作中這樣寫(xiě) val structType = new StructType( Array( StructField("id", IntegerType, true), StructField("name", StringType, true), StructField("age", IntegerType, true) ) ) 上面的是string 要的是int ,一定要注意因?yàn)闀?huì)經(jīng)常出錯(cuò)要轉(zhuǎn)化類(lèi)型 val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt))
df.select('name).show 這個(gè)在spark-shell 可以 或者df.select('name').show 但是代碼里面不行,需要隱士轉(zhuǎn)
show源碼 默認(rèn)是true 顯示小于等于20條,對(duì)應(yīng)行中的字符 是false就全部顯示出來(lái) show(30,false) 也是全部顯示出來(lái)不會(huì)截?cái)? show(5) 但是后面的多與20字符就不會(huì)顯示 你可以show(5,false)
df.select("name").show(false) import spark.implicits._ //這樣不隱士轉(zhuǎn)換不行 df.select('name).show(false) df.select($"name") 第一個(gè)select走的底層源碼是 第一個(gè)源碼圖 2,3個(gè)select走的源碼是第二個(gè)
head 默認(rèn)調(diào)第一條,你想展示幾條就調(diào)幾條
sort源碼默認(rèn)升序 降序解釋中有
全局視圖加上 global_temp 規(guī)定
val spark = SparkSession.builder() .appName("Test") .master("local[2]") .getOrCreate() val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt") import spark.implicits._ val result = mess.map(_.split(",")).map(x => Info(x(0).toInt,x(1),x(2).toInt)).toDF() //在1.x 版本是可以的 在2.x不可以需要價(jià)格rdd result.map(x => x(0)).show() 這樣寫(xiě)是對(duì)的 result.rdd.map(x => x(0)).collect().foreach(println) 去類(lèi)中的數(shù)據(jù)兩種寫(xiě)法: result.rdd.map(x => x(0)).collect().foreach(println) result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println)
對(duì)于分隔符 | 你切分一定要加轉(zhuǎn)義字符,否則數(shù)據(jù)不對(duì)
感謝各位的閱讀,以上就是“Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
當(dāng)前名稱(chēng):SparkSQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法
轉(zhuǎn)載來(lái)源:http://www.rwnh.cn/article34/ghcppe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、動(dòng)態(tài)網(wǎng)站、微信公眾號(hào)、App設(shè)計(jì)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)