国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spark】Spark SQL基礎(chǔ)使用詳解和案例

這篇具有很好參考價值的文章主要介紹了【Spark】Spark SQL基礎(chǔ)使用詳解和案例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Spark SQL是Apache Spark的一個模塊,它提供了一種基于結(jié)構(gòu)化數(shù)據(jù)的編程接口。
Spark SQL支持結(jié)構(gòu)化數(shù)據(jù)的處理,包括數(shù)據(jù)的讀取、轉(zhuǎn)換和查詢。它可以將傳統(tǒng)的基于表和SQL的操作和Spark的分布式計算相結(jié)合,提供強大的數(shù)據(jù)處理和分析能力。
Spark SQL也可以與其他Spark組件集成,如MLlib和GraphX,以支持更廣泛的數(shù)據(jù)處理場景。

  1. 讀入數(shù)據(jù)
val spark: SparkSession = SparkSession.builder().master("local").appName("agent_log_df").getOrCreate()

val fileRDD: RDD[String] = spark.sparkContext.textFile("datas/agent.log")
val rowRDD: RDD[Row] = fileRDD.map(_.split(" ")).map(
line => Row(line(0), line(1).toInt, line(2).toInt)
)
  1. 創(chuàng)建表結(jié)構(gòu)
// 定義表結(jié)構(gòu)
val df: DataFrame = spark.sqlContext.createDataFrame(rowRDD,
StructType(Seq(StructField("t1", StringType), StructField("t2", IntegerType), StructField("t3", IntegerType)))
)
  1. 創(chuàng)建臨時表
df.createTempView("tmp_table")
  1. sql邏輯
val sql =
  """
    |select t1,t2,t3
    |from (
    |select t1, sum(t2) as t2, sum(t3) as t3 from tmp_table group by t1
    |) t
    |order by t2 desc,t3 desc
    |limit 10
    |""".stripMargin
  1. sql執(zhí)行
val result: DataFrame = spark.sql(sql)
  1. 結(jié)果展示
result.show()

上述中有幾個關(guān)鍵的類和方法:

  1. sqlContext

Spark的SQLContext是負(fù)責(zé)Spark SQL操作的上下文對象,它提供了許多與SQL相關(guān)的功能,包括讀取和處理各種數(shù)據(jù)源中的數(shù)據(jù)、執(zhí)行SQL查詢、創(chuàng)建數(shù)據(jù)框架和表等等。
通過SQLContext,用戶可以使用DataFrame API來以結(jié)構(gòu)化和類型安全的方式處理數(shù)據(jù),并可以使用SQL語言和Spark SQL的內(nèi)置函數(shù)來進(jìn)行數(shù)據(jù)分析和查詢。
總體來說,Spark的SQLContext是非常強大和靈活的,可以適應(yīng)各種數(shù)據(jù)處理和分析需求,并且在處理大規(guī)模數(shù)據(jù)時具有出色的性能和擴(kuò)展性。
在使用Spark的SqlContext之前,需要首先初始化一個SparkContext對象并創(chuàng)建一個RDD。

使用SqlContext需要進(jìn)行以下步驟:

創(chuàng)建一個SparkConf對象,并設(shè)置一些參數(shù),如AppName和Master。
使用SparkConf對象創(chuàng)建一個SparkContext對象。
通過SparkContext對象創(chuàng)建一個SqlContext對象。
使用SqlContext對象加載數(shù)據(jù),并將其轉(zhuǎn)換為DataFrame類型。
以下是具體的代碼示例:

from pyspark.sql import SQLContext
from pyspark import SparkContext, SparkConf

#創(chuàng)建SparkConf
conf = SparkConf().setAppName("sql_example").setMaster("local[*]")

#創(chuàng)建SparkContext
sc = SparkContext(conf=conf)

#創(chuàng)建SqlContext
sqlContext = SQLContext(sc)

#讀取數(shù)據(jù)文件
people = sc.textFile("people.txt")

#將數(shù)據(jù)轉(zhuǎn)換為一個DataFrame對象
people_df = sqlContext.createDataFrame(people.map(lambda row: row.split(",")), ["name", "age"])

在以上示例中,我們首先創(chuàng)建了一個SparkConf對象,并設(shè)置了AppName和Master屬性。然后使用SparkConf對象創(chuàng)建了一個SparkContext對象,并將其傳遞給SqlContext構(gòu)造函數(shù)。接著讀取了一個數(shù)據(jù)文件,并使用SqlContext對象將數(shù)據(jù)轉(zhuǎn)換成DataFrame對象。

注意:使用SqlContext時需要將數(shù)據(jù)轉(zhuǎn)換成DataFrame對象,而不是RDD對象。如果需要在SqlContext中使用RDD對象,可以將其轉(zhuǎn)換為DataFrame對象,再進(jìn)行操作。

  1. StructType

Spark的StructType是一種定義結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)類型。
它類似于SQL表的結(jié)構(gòu),每個StructType都由一組結(jié)構(gòu)字段組成,每個結(jié)構(gòu)字段都有一個名稱和數(shù)據(jù)類型。
使用StructType,用戶可以對結(jié)構(gòu)化數(shù)據(jù)進(jìn)行索引、查詢和分析。
StructType被廣泛應(yīng)用于Spark中的DataFrame API和SQL查詢中。

使用方法:

導(dǎo)入 Spark SQL 的相關(guān)包
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}
定義 StructType
例如,假設(shè)要定義一個包含 name 和 age 兩個字段的 StructType。則可以按照以下方式定義:

val schema = StructType(
    StructField("name", StringType, true) ::
    StructField("age", IntegerType, true) :: Nil
)
// 其中,StructType 用于表示整個數(shù)據(jù)結(jié)構(gòu),StructField 用于表示每個字段的信息,StringType 用于表示字段類型為字符串類,IntegerType 用于表示字段類型為整數(shù)。

// 使用 StructType
// 在創(chuàng)建 DataFrame 時,可以通過傳遞定義好的 StructType 對象來指定 DataFrame 的結(jié)構(gòu)。例如:

val data = spark.sparkContext.parallelize(Seq(("John", 25), ("Mary", 30), ("Jack", 22)))
val df = spark.createDataFrame(data).toDF("name", "age")

df.printSchema()
df.show()

輸出結(jié)果為:

root
 |-- name: string (nullable = true)
 |-- age: integer (nullable = true)

+----+---+
|name|age|
+----+---+
|John| 25|
|Mary| 30|
|Jack| 22|
+----+---+

栗子

給一個日志文件,過濾出兩張表,然后設(shè)計表結(jié)構(gòu),使用Spark SQL實現(xiàn)兩張表的連接文章來源地址http://www.zghlxwxcb.cn/news/detail-611258.html

object spark_sql_code_1 {
  def main(args: Array[String]): Unit = {
    // TODO 1: 創(chuàng)建spark環(huán)境
    val spark: SparkSession = SparkSession.builder().master("local").appName("spark sql code").getOrCreate()

    // TODO 2: 讀取數(shù)據(jù)
    val rowRDD: RDD[Row] = spark.sparkContext.textFile("datas/agent.log")
      .map(line => {
        val words: Array[String] = line.split(" ");
        Row(words(1), words(2).toInt, words(3).toInt)
      })

    rowRDD.persist()

    val tableRDD1: RDD[Row] = rowRDD.filter(row => {
      row.getInt(1) % 2 == 0
    })

    val tableRDD2: RDD[Row] = rowRDD.filter(row => {
      row.getInt(2) % 2 == 0
    })


    // TODO 3: 創(chuàng)建表結(jié)構(gòu)和臨時表
    // 定義表結(jié)構(gòu)
    val df1: DataFrame = spark.sqlContext.createDataFrame(tableRDD1,
      StructType(Seq(StructField("t1", StringType), StructField("t2", IntegerType), StructField("t3", IntegerType)))
    )

    df1.createTempView("t")

    val df2: DataFrame = spark.sqlContext.createDataFrame(tableRDD2,
      StructType(Seq(StructField("r1", StringType), StructField("r2", IntegerType), StructField("r3", IntegerType)))
    )

    df2.createTempView("r")

    // TODO 4: sql邏輯
    val sql: String =
      """
        |select r1 as t1, r2 as t2, r3 as t3, 'r' as tp from r
        |""".stripMargin


    // TODO 5: 執(zhí)行sql
    val result: DataFrame = spark.sql(sql)

    // TODO 6: 結(jié)果顯示
    result.show()

    // TODO 7: 關(guān)閉spark環(huán)境
    spark.stop()
  }

到了這里,關(guān)于【Spark】Spark SQL基礎(chǔ)使用詳解和案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Spark---SparkSQL介紹

    Spark---SparkSQL介紹

    Shark是基于Spark計算框架之上且兼容Hive語法的SQL執(zhí)行引擎,由于底層的計算采用了Spark,性能比MapReduce的Hive普遍快2倍以上,當(dāng)數(shù)據(jù)全部load在內(nèi)存的話,將快10倍以上,因此Shark可以作為交互式查詢應(yīng)用服務(wù)來使用。除了基于Spark的特性外,Shark是完全兼容Hive的語法,表結(jié)構(gòu)以及

    2024年01月21日
    瀏覽(17)
  • 【spark】SparkSQL

    【spark】SparkSQL

    什么是SparkSQL SparkSQL是Spark的一個模塊,用于處理海量 結(jié)構(gòu)化數(shù)據(jù) 為什么學(xué)習(xí)SparkSQL SparkSQL是非常成熟的海量結(jié)構(gòu)化數(shù)據(jù)處理框架: 學(xué)習(xí)SparkSQL主要在2個點: SparkSQL本身十分優(yōu)秀,支持SQL語言、性能強、可以自動優(yōu)化、API簡單、兼容HIVE等等 企業(yè)大面積在使用SparkSQL處理業(yè)務(wù)數(shù)

    2024年01月20日
    瀏覽(43)
  • 電影評分?jǐn)?shù)據(jù)分析案例-Spark SQL

    電影評分?jǐn)?shù)據(jù)分析案例-Spark SQL

    1. 2. 3. 4. 5. 6.

    2024年02月08日
    瀏覽(32)
  • Spark(15):SparkSQL之DataFrame

    目錄 0. 相關(guān)文章鏈接 1. DataFrame的作用 2. 創(chuàng)建DataFrame 3. SQL 語法 4.?DSL 語法 5.?RDD 轉(zhuǎn)換為 DataFrame 6.?DataFrame 轉(zhuǎn)換為 RDD ?Spark文章匯總? ????????Spark SQL 的 DataFrame API 允許我們使用 DataFrame 而不用必須去注冊臨時表或者生成 SQL 表達(dá)式。DataFrame API 既有 transformation 操作也有

    2024年02月13日
    瀏覽(21)
  • Spark(16):SparkSQL之DataSet

    目錄 0. 相關(guān)文章鏈接 1. DataSet的定義 2.?創(chuàng)建DataSet 2.1.?使用樣例類序列創(chuàng)建 DataSet 2.2.?使用基本類型的序列創(chuàng)建 DataSet 2.3.?注意 3.?RDD 轉(zhuǎn)換為 DataSet 4.?DataSet 轉(zhuǎn)換為 RDD ?Spark文章匯總? DataSet 是具有強類型的數(shù)據(jù)集合,需要提供對應(yīng)的類型信息。 在實際使用的時候,很少用到

    2024年02月13日
    瀏覽(21)
  • 【Spark精講】一文講透SparkSQL執(zhí)行過程

    【Spark精講】一文講透SparkSQL執(zhí)行過程

    邏輯計劃階段會將用戶所寫的 SQL語句轉(zhuǎn)換成樹型數(shù)據(jù)結(jié)構(gòu)( 邏輯算子樹 ), SQL語句中蘊含的邏輯映射到邏輯算子樹的不同節(jié)點。 顧名思義,邏輯計劃階段生成的邏輯算子樹并不會直接提交執(zhí)行,僅作為中間階段 。 最終邏輯算子樹的生成過程經(jīng)歷 3 個子階段,分別對應(yīng) 未解析

    2024年02月03日
    瀏覽(25)
  • spark第四章:SparkSQL基本操作

    spark第四章:SparkSQL基本操作

    spark第一章:環(huán)境安裝 spark第二章:sparkcore實例 spark第三章:工程化代碼 spark第四章:SparkSQL基本操作 接下來我們學(xué)習(xí)SparkSQL他和Hql有些相似。Hql是將操作裝換成MR,SparkSQL也是,不過是使用Spark引擎來操作,效率更高一些 以上是這次博客需要的所有依賴,一次性全加上。 一共

    2024年02月07日
    瀏覽(32)
  • spark中Rdd依賴和SparkSQL介紹--學(xué)習(xí)筆記

    spark中Rdd依賴和SparkSQL介紹--學(xué)習(xí)筆記

    1.1概念 rdd的特性之一 相鄰rdd之間存在依賴關(guān)系(因果關(guān)系) 窄依賴 每個父RDD的一個Partition最多被子RDD的一個Partition所使用 父rdd和子rdd的分區(qū)是一對一(多對一) 觸發(fā)窄依賴的算子 map(),flatMap(),filter() 寬依賴 父RDD的一個partition會被子rdd的多個Partition所使用 父rdd和子rdd的

    2024年01月17日
    瀏覽(19)
  • SparkSQL與Hive整合(Spark On Hive)

    SparkSQL與Hive整合(Spark On Hive)

    hive metastore元數(shù)據(jù)服務(wù)用來存儲元數(shù)據(jù),所謂元數(shù)據(jù),即hive中庫、表、字段、字段所屬表、表所屬庫、表的數(shù)據(jù)所在目錄及數(shù)據(jù)分區(qū)信息。元數(shù)據(jù)默認(rèn)存儲在hive自帶的Derby數(shù)據(jù)庫。在內(nèi)嵌模式和本地模式下,metastore嵌入在主hive server進(jìn)程中。但在遠(yuǎn)程模式下,metastore 和 hive

    2024年02月12日
    瀏覽(27)
  • 2023_Spark_實驗十四:SparkSQL入門操作

    2023_Spark_實驗十四:SparkSQL入門操作

    1、將emp.csv、dept.csv文件上傳到分布式環(huán)境,再用? hdfs??dfs -put dept.csv /input/ hdfs??dfs -put emp.csv /input/ 將本地文件put到hdfs文件系統(tǒng)的input目錄下 2、或者調(diào)用本地文件也可以。區(qū)別:sc.textFile(\\\"file:///D:\\\\temp\\\\emp.csv\\\") StructType 是個case class,一般用于構(gòu)建schema. 因為是case class,所以使

    2024年02月08日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包