中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spark SQL中的RDD與DataFrame轉換實例用法

發布時間:2021-09-17 12:43:52 來源:億速云 閱讀:289 作者:chen 欄目:建站服務器

這篇文章主要講解了“Spark SQL中的RDD與DataFrame轉換實例用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spark SQL中的RDD與DataFrame轉換實例用法”吧!

一.第一種方式RDD轉化為DataFrame

1.官網

Spark SQL中的RDD與DataFrame轉換實例用法

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不可以需要價格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.注意事項

注意2.2版本以前 類的構造方法參數有限
在2.2后沒有限制了

Spark SQL中的RDD與DataFrame轉換實例用法

二.第二種轉換方式

1.官網

Spark SQL中的RDD與DataFrame轉換實例用法

2.解釋

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

3.步驟

Spark SQL中的RDD與DataFrame轉換實例用法

4.步驟解釋

從原有的RDD轉化 ,類似于textFile
一個StructType匹配Row里面的數據結構(幾列),就是幾個StructField 
通過createDataFrame  把schema與RDD關聯上

5.源碼解釋StructType

Spark SQL中的RDD與DataFrame轉換實例用法

6.源碼解釋

StructField 可以理解為一列
StructType  包含  1-n 個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.經典錯誤

Spark SQL中的RDD與DataFrame轉換實例用法

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 ,一定要注意因為會經常出錯要轉化類型
val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt))

三.方法的使用

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

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

2.show源碼

show源碼  默認是true  顯示小于等于20條,對應行中的字符
是false就全部顯示出來
show(30,false)   也是全部顯示出來不會截斷
show(5)  但是后面的多與20字符就不會顯示
你可以show(5,false)

Spark SQL中的RDD與DataFrame轉換實例用法

Spark SQL中的RDD與DataFrame轉換實例用法

3.select方法源碼

Spark SQL中的RDD與DataFrame轉換實例用法

Spark SQL中的RDD與DataFrame轉換實例用法

4.select 方法調用走的位置

df.select("name").show(false)
import spark.implicits._
//這樣不隱士轉換不行
df.select('name).show(false)
df.select($"name")
第一個select走的底層源碼是 第一個源碼圖
2,3個select走的源碼是第二個

5.head源碼

head 默認調第一條,你想展示幾條就調幾條

Spark SQL中的RDD與DataFrame轉換實例用法

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

Spark SQL中的RDD與DataFrame轉換實例用法

7.sort源碼

sort源碼默認升序
降序解釋中有

Spark SQL中的RDD與DataFrame轉換實例用法

四.sql的操作方法

1.官網臨時試圖

Spark SQL中的RDD與DataFrame轉換實例用法

2.全局試圖操作

全局視圖加上  global_temp 規定

Spark SQL中的RDD與DataFrame轉換實例用法

五.雜項

1.報錯

Spark SQL中的RDD與DataFrame轉換實例用法

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不可以需要價格rdd
 result.map(x => x(0)).show() 
 這樣寫是對的
 result.rdd.map(x => x(0)).collect().foreach(println)
 去類中的數據兩種寫法:
 result.rdd.map(x => x(0)).collect().foreach(println)
result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println)

3.注意轉義字符

對于分隔符 |   你切分一定要加轉義字符,否則數據不對

感謝各位的閱讀,以上就是“Spark SQL中的RDD與DataFrame轉換實例用法”的內容了,經過本文的學習后,相信大家對Spark SQL中的RDD與DataFrame轉換實例用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正镶白旗| 青川县| 斗六市| 英吉沙县| 武陟县| 集安市| 波密县| 临夏市| 岳阳市| 项城市| 山东省| 濉溪县| 康马县| 高邑县| 于都县| 东乡族自治县| 图片| 赣州市| 祁阳县| 黔东| 邯郸县| 武宁县| 沅陵县| 宜黄县| 子长县| 丁青县| 车致| 沁水县| 朝阳县| 昌黎县| 同德县| 贵州省| 广河县| 宁陵县| 泊头市| 久治县| 巴青县| 德惠市| 敖汉旗| 始兴县| 德钦县|