Spark Sql之DataFrame實戰詳解

2021-07-11 16:01:51 字數 3577 閱讀 8476

在spark-1.3新加的最重要的新特性之一dataframe的引入,很類似在r語言中的dataframe的操作,使得spark-sql更穩定高效。

1、dataframe簡介:

在spark中,dataframe是一種以rdd為基礎的分布式資料據集,類似於傳統資料庫聽二維**,dataframe帶有schema元資訊,即dataframe所表示的二維表資料集的每一列都帶有名稱和型別。

類似這樣的

root

|-- age: long (nullable = true)

|-- id: long (nullable = true)

|-- name: string (nullable = true)

2、準備測試結構化資料集

people.json

3、通過程式設計方式理解dataframe

1)  通過dataframe的api來運算元據

import org.apache.spark.sql.sqlcontext

import org.apache.spark.sparkconf

import org.apache.spark.sparkcontext

import org.apache.log4j.level

import org.apache.log4j.logger

object dataframetest

}//foreachpartition 處理各欄位返回值,生產中常用的方式

df.select(df.col("id"), df.col("name"), df.col("age")).foreachpartition )

}}}

2)通過登錄檔,操作sql的方式來運算元據

import org.apache.spark.sql.sqlcontext

import org.apache.spark.sparkconf

import org.apache.spark.sparkcontext

import org.apache.log4j.level

import org.apache.log4j.logger

/** * @author administrator

*/object dataframetest2

}//foreachpartition 處理各欄位返回值,生產中常用的方式

sqlcontext.sql("select id,name,age from people ").foreachpartition )

}}}

兩種方式執行結果是一樣的,第一種適合程式設計師,第二種適合熟悉sql的人員。

4、對於非結構化的資料

people.txt

1,ganymede,32

2, lilei, 19

3, lily, 25

4, hanmeimei, 25

5, lucy, 37

6, wcc, 4

1)  通過字段反射來對映註冊臨時表

import org.apache.spark.sql.sqlcontext

import org.apache.spark.sparkconf

import org.apache.spark.sparkcontext

import org.apache.log4j.level

import org.apache.log4j.logger

import org.apache.spark.sql.types.integertype

import org.apache.spark.sql.types.structtype

import org.apache.spark.sql.types.stringtype

import org.apache.spark.sql.types.structfield

import org.apache.spark.sql.row

/** * @author administrator

*/object dataframetest3 .map

}val structtype = structtype(array(

structfield("id", integertype, true),

structfield("name", stringtype, true),

structfield("age", integertype, true)));

val df = sqlcontext.createdataframe(peoplerowrdd, structtype);

df.registertemptable("people")

df.show()

df.printschema()

}}

2)   通過case class反射來對映註冊臨時表

import org.apache.spark.sql.sqlcontext

import org.apache.spark.sparkconf

import org.apache.spark.sparkcontext

import org.apache.log4j.level

import org.apache.log4j.logger

import org.apache.spark.sql.types.integertype

import org.apache.spark.sql.types.structtype

import org.apache.spark.sql.types.stringtype

import org.apache.spark.sql.types.structfield

import org.apache.spark.sql.row

/** * @author administrator

*/object dataframetest4 .map

}//這裡需要隱式轉換一把

import sqlcontext.implicits._

val df = peoplerdd.todf()

df.registertemptable("people")

df.show()

df.printschema()

}}

5、總結:

spark sql是spark中的乙個模組,主要用於進行結構化資料的處理。它提供的最核心的程式設計抽象,就是dataframe。同時spark sql還可以作為分布式的sql查詢引擎。spark sql最重要的功能之一,就是從hive中查詢資料。

dataframe,可以理解為是,以列的形式組織的,分布式的資料集合。它其實和關係型資料庫中的表非常類似,但是底層做了很多的優化。dataframe可以通過很多**進行構建,包括:結構化的資料檔案,hive中的表,外部的關係型資料庫,以及rdd。

python筆記4 資料結構之DataFrame

coding utf 8 1.概念 資料框。用於儲存多行和多列的資料集合 from pandas import dataframe 2.定義 自動生成索引的方式 df dataframe 自定義索引的方式 df dataframe data index first second third 3.限制...

SparkSQL之更改表結構

本文篇幅較短,內容源於自己在使用sparksql時碰到的乙個小問題,因為在之後的資料處理過程中多次使用,所以為了加深印象,在此單獨成文,以便回顧。在使用sparksql進行資料處理時,碰到這樣一種情況 需要更改dataframe當中某個欄位的型別。簡而言之,就是需要更改sparksql的表結構。出於...

Spark學習之 Spark SQL 一

感謝大牛的系列文章,本文只是本人學習過程的記錄,首先向大神致敬 1.建立檔案people.json 2.上傳到hdfs檔案系統 目錄位置 data people.json hdfs dfs put people.json data3.在hdfs中檢視檔案是否完整,如下 root hd 02 hdfs...