SparkSQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法-創(chuàng)新互聯(lián)

這篇文章主要講解了“Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法”吧!

成都創(chuàng)新互聯(lián)是一家專業(yè)提供渭南企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、做網(wǎng)站H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為渭南眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

一.第一種方式RDD轉(zhuǎn)化為DataFrame

1.官網(wǎng)

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

2.解釋

反射
把schema信息全部定義在case class 類里面

3.代碼

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)

4.注意事項(xiàng)

注意2.2版本以前 類的構(gòu)造方法參數(shù)有限
在2.2后沒有限制了

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

二.第二種轉(zhuǎn)換方式

1.官網(wǎng)

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

2.解釋

制定scheme信息 就是編程的方式   作用到Row 上面

3.步驟

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

4.步驟解釋

從原有的RDD轉(zhuǎn)化 ,類似于textFile
一個(gè)StructType匹配Row里面的數(shù)據(jù)結(jié)構(gòu)(幾列),就是幾個(gè)StructField 
通過createDataFrame  把schema與RDD關(guān)聯(lián)上

5.源碼解釋StructType

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

6.源碼解釋

StructField 可以理解為一列
StructType  包含  1-n 個(gè)StructField

7.最終代碼

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))
    //工作中這樣寫
    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()
  }
}

8.經(jīng)典錯(cuò)誤

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

9.原因解決

自己定義的schema信息與Row中的信息不匹配
val result = mess.map(_.split(",")).map(x => Row(x(0), x(1), x(2)))
//工作中這樣寫
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)化類型
val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt))

三.方法的使用

1.spark-shell 有的方法在代碼要自己隱士磚換

df.select('name).show  這個(gè)在spark-shell 可以
或者df.select('name').show 
但是代碼里面不行,需要隱士轉(zhuǎn)

2.show源碼

show源碼  默認(rèn)是true  顯示小于等于20條,對(duì)應(yīng)行中的字符
是false就全部顯示出來
show(30,false)   也是全部顯示出來不會(huì)截?cái)?show(5)  但是后面的多與20字符就不會(huì)顯示
你可以show(5,false)

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

3.select方法源碼

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

4.select 方法調(diào)用走的位置

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è)

5.head源碼

head 默認(rèn)調(diào)第一條,你想展示幾條就調(diào)幾條

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

6.first() 展示第一條  底層調(diào)用的是head

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

7.sort源碼

sort源碼默認(rèn)升序
降序解釋中有

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

四.sql的操作方法

1.官網(wǎng)臨時(shí)試圖

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

2.全局試圖操作

全局視圖加上  global_temp 規(guī)定

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

五.雜項(xiàng)

1.報(bào)錯(cuò)

Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法

2.原因及代碼

 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() 
 這樣寫是對(duì)的
 result.rdd.map(x => x(0)).collect().foreach(println)
 去類中的數(shù)據(jù)兩種寫法:
 result.rdd.map(x => x(0)).collect().foreach(println)
result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println)

3.注意轉(zhuǎn)義字符

對(duì)于分隔符 |   你切分一定要加轉(zhuǎn)義字符,否則數(shù)據(jù)不對(duì)

感謝各位的閱讀,以上就是“Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Spark SQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

文章題目:SparkSQL中的RDD與DataFrame轉(zhuǎn)換實(shí)例用法-創(chuàng)新互聯(lián)
文章鏈接:http://m.kartarina.com/article44/ccghee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司關(guān)鍵詞優(yōu)化網(wǎng)站維護(hù)企業(yè)網(wǎng)站制作做網(wǎng)站虛擬主機(jī)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
主站蜘蛛池模板: 在线观看无码AV网址| 亚洲国产精品无码中文字| 精品无码国产污污污免费网站| 乱色精品无码一区二区国产盗| 无码国产69精品久久久久网站| 日韩精品无码区免费专区| 国产AV无码专区亚洲AVJULIA| 亚洲AV无码一区二区三区电影| 亚洲日韩欧洲无码av夜夜摸| 日韩精品中文字幕无码专区| 亚洲av无码专区在线播放| 无码国内精品久久人妻麻豆按摩 | 免费无码看av的网站| 亚洲无码精品浪潮| 亚洲人AV在线无码影院观看| 国99精品无码一区二区三区 | 久久中文精品无码中文字幕 | 精品无码一区二区三区电影| 狠狠躁狠狠爱免费视频无码| 成人h动漫精品一区二区无码| 无码无套少妇毛多18p| 东京热无码av一区二区| 日韩精品无码Av一区二区| 99国产精品无码| 亚洲av无码一区二区乱子伦as| 亚洲精品无码久久久| 成人免费无码精品国产电影| 亚洲Av永久无码精品黑人 | 久久精品无码av| 国产成人无码区免费A∨视频网站 国产成人无码午夜视频在线观看 国产成人无码精品一区不卡 | 亚洲精品中文字幕无码蜜桃| 韩国精品一区二区三区无码视频| 亚洲美免无码中文字幕在线| 免费A级毛片av无码| 久久精品国产亚洲AV无码麻豆| 国产精品视频一区二区三区无码| 亚洲欧洲日产国码无码网站| 亚洲午夜无码久久久久| 一区二区三区无码视频免费福利| 久久精品无码免费不卡| 日本无码色情三级播放|