91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

分宜县| 偃师市| 胶州市| 巴青县| 手游| 乌鲁木齐市| 博乐市| 永善县| 湘潭县| 娄烦县| 夏河县| 无锡市| 龙川县| 米泉市| 鲜城| 友谊县| 芦溪县| 永寿县| 保亭| 通化县| 太仓市| 星子县| 呼玛县| 扬中市| 临江市| 大兴区| 北辰区| 贡觉县| 盐源县| 武鸣县| 阿城市| 伊宁县| 凤山县| 新蔡县| 玉环县| 克什克腾旗| 汶上县| 德惠市| 手游| 清涧县| 宣汉县|