包sql
允許關係查詢的執行,包括那些用SQL表達使用火花。
- 字母
- 通過繼承
- sql
- AnyRef
- 任何
- 隱藏所有
- 顯示所有
- 公共
- 所有
類型成員
- 類AnalysisException擴展異常與SparkThrowable與可序列化的
時拋出一個查詢失敗分析,通常是因為查詢本身是無效的。
時拋出一個查詢失敗分析,通常是因為查詢本身是無效的。
- 注釋
- @Stable ()
- 自
-
1.3.0
- 類列擴展日誌記錄
這一列數據為基礎進行計算
DataFrame
。這一列數據為基礎進行計算
DataFrame
。可以構造一個新列DataFrame基於輸入列的禮物:
df (“columnName”)/ /在一個特定的“df”DataFrame。坳(“columnName”)/ /通用列沒有與DataFrame相關聯。坳(“columnName.field”)/ /提取一個結構體字段坳(“a.column.with.dots”)/ /逃避”。在列名。美元“columnName”/ / Scala短手指定列。
列對象可以構成複雜的表達式:
美元“一個”+1美元“一個”= = = $“b”
- 注釋
- @Stable ()
- 自
-
1.3.0
- 請注意
-
可以通過訪問內部催化劑表達式expr,但該方法僅用於調試目的,可以改變在未來引發釋放。
- 類ColumnName擴展列
一個方便的類用於構建模式。
一個方便的類用於構建模式。
- 注釋
- @Stable ()
- 自
-
1.3.0
- 特征CreateTableWriter(T]擴展WriteConfigMethods(CreateTableWriter(T]]
特征限製調用創建和替換操作。
特征限製調用創建和替換操作。
- 自
-
3.0.0
- 類型DataFrame=數據集(行]
- 最後類DataFrameNaFunctions擴展AnyRef
處理缺失數據的功能
DataFrame
年代。處理缺失數據的功能
DataFrame
年代。- 注釋
- @Stable ()
- 自
-
1.3.1
- 類DataFrameReader擴展日誌記錄
接口用於負載數據集從外部存儲係統(如。
接口用於負載數據集從外部存儲係統(如文件係統、鍵值存儲等)。使用
SparkSession.read
來訪問。- 注釋
- @Stable ()
- 自
-
1.4.0
- 最後類DataFrameStatFunctions擴展AnyRef
統計功能
DataFrame
年代。統計功能
DataFrame
年代。- 注釋
- @Stable ()
- 自
-
1.4.0
- 最後類DataFrameWriter(T]擴展AnyRef
接口用於編寫一個數據集(如外部存儲係統。
接口用於編寫一個數據集外部存儲係統(如文件係統、鍵值存儲等)。使用
Dataset.write
來訪問。- 注釋
- @Stable ()
- 自
-
1.4.0
- 最後類DataFrameWriterV2(T]擴展CreateTableWriter(T]
接口用於編寫一個org.apache.spark.sql.Dataset外部存儲使用v2 API。
接口用於編寫一個org.apache.spark.sql.Dataset外部存儲使用v2 API。
- 注釋
- @Experimental ()
- 自
-
3.0.0
- 類數據集(T]擴展可序列化的
數據集是一種強類型集合的特定於域的對象可以使用功能或關係轉變為並行操作。
數據集是一種強類型集合的特定於域的對象可以使用功能或關係轉變為並行操作。每個數據集也有一個叫做無類型的視圖
DataFrame
,這是一個數據集行。操作上可用數據集分為轉換和行動。轉換是產生新的數據集,和動作的觸發計算並返回結果。轉換示例包括地圖、過濾、選擇和聚合(
groupBy
)。示例操作計數、顯示或寫入數據文件係統。數據集是“懶”,即計算隻是調用時觸發一個動作。在內部,一個數據集表示一個邏輯方案,描述了計算所需數據。當調用一個操作,火花的查詢優化器優化邏輯規劃和生成一個物理規劃高效的並行和分布式的方式執行。探索合理的計劃以及優化物理計劃,使用
解釋
函數。有效地支持特定於域的對象,一個編碼器是必需的。編碼器地圖領域特定類型
T
引發的內部類型係統。例如,給定一個類人
有兩個字段,的名字
(字符串)和年齡
(int),一個編碼器用於告訴火花來生成代碼在運行時序列化人
對象成二元結構。這種二元結構通常有更低的內存占用以及優化數據處理的效率(如柱狀的格式)。了解內部二進製表示數據,使用模式
函數。通常有兩種方法可以創建一個數據集。最常見的方式是通過火花指向一些文件存儲係統,使用
讀
功能上可用SparkSession
。瓦爾人= spark.read.parquet (“…”)。as[人]/ / Scala數據集<人>人= spark.read () .parquet (“…”)。as (Encoders.bean(人。類));/ / Java
數據也可以通過創建轉換可以在現有的數據集。例如,下麵創建一個新的數據集通過應用現有的過濾器:
瓦爾名稱= people.map (_.name)/ /在Scala中;名字是一個數據集(字符串)數據集<字符串> =人名字。地圖((p) - > p.name Encoders.STRING));
數據集操作也可以無類型,通過各種領域特定語言(DSL)中定義的功能:數據集(這類),列,功能。這些操作中可用的操作非常類似於R或Python的抽象數據幀。
選擇一列的數據集,使用
應用
方法在Scala中,上校
在Java中。瓦爾ageCol =人(“年齡”)/ /在Scala中列ageCol = people.col (“年齡”);/ /在Java中
請注意,列類型也可以通過其各種功能操作。
/ /下麵創建一個新的列,增加每個人的年齡10。人(“年齡”)+10/ /在Scala中people.col (“年齡”)的話語(10);/ /在Java中
Scala中的一個更具體的例子:
/ /創建數據集使用SparkSession(行)瓦爾人= spark.read.parquet (“…”)瓦爾部門= spark.read.parquet (“…”)people.filter (“30歲>”). join(部門、人(“deptId”)= = =部門(“id”).groupBy(部門(“名稱”)、人(“性別”).agg (avg(人(“工資”))、馬克斯(人(“年齡”)))
和在Java中:
/ /創建數據集使用SparkSession <行>數據集<行>人= spark.read () .parquet (“…”);數據集<行>部門= spark.read () .parquet (“…”);people.filter (people.col (“年齡”)gt (30.. join(部門、people.col ())“deptId”).equalTo (department.col (“id”))).groupBy (department.col (“名稱”),people.col (“性別”).agg (avg (people.col (“工資”)),馬克斯(people.col (“年齡”)));
- 注釋
- @Stable ()
- 自
-
1.6.0
- 用例類DatasetHolder(T]擴展產品與可序列化的
一個集裝箱數據集在Scala中,用於隱式轉換。
- 注釋
- @Stable ()
- 自
-
1.6.0
- 特征編碼器(T]擴展可序列化的
用於轉換一個JVM類型的對象
T
從內部引發SQL表示。用於轉換一個JVM類型的對象
T
從內部引發SQL表示。Scala
值得一提的是編碼器通常是通過自動創建的
SparkSession
通過調用靜態方法,也可以顯式地創建編碼器。進口spark.implicits._瓦爾ds =Seq(1,2,3).toDS ()/ /隱式地提供(spark.implicits.newIntEncoder)
Java
指定編碼器通過調用靜態方法編碼器。
列表<字符串> data = arrays . aslist (“abc”,“abc”,“xyz”);數據集<字符串> ds =上下文。createDataset(數據,Encoders.STRING ());
編碼器可以組合成元組:
編碼器< Tuple2 <整數,字符串> > encoder2 = Encoders.tuple (Encoders.INT (), Encoders.STRING ());列表< Tuple2 <整數,字符串> > data2 = arrays . aslist (新scala.Tuple2 (1,“一個”);數據集< Tuple2 <整數,字符串> > ds2 =上下文。createDataset (data2 encoder2);
或由Java bean:
Encoders.bean (MyClass。類);
實現
- 編碼器應該是線程安全的。
- 注釋
-
@implicitNotFound
( "store ${T} instances in a Dataset. Primitive types (Int, String, etc) and Product types (case " +
"classes) are supported by importing spark.implicits._ Support for serializing other types " +
"will be added in future releases."">…) - 自
-
1.6.0
- 類ExperimentalMethods擴展AnyRef
實驗方法::實驗::持有人最勇敢的人。
實驗方法::實驗::持有人最勇敢的人。我們不保證兼容性關於二進製兼容性和穩定來源的方法。
spark.experimental。extraStrategies + =…
- 注釋
- @Experimental () @Unstable ()
- 自
-
1.3.0
- 文摘類ForeachWriter(T]擴展可序列化的
編寫自定義邏輯的抽象類來處理由一個查詢生成的數據。
編寫自定義邏輯的抽象類來處理由一個查詢生成的數據。這通常是用來查詢的輸出流寫入任意的存儲係統。任何實現的基類將使用火花在以下方式。
- 這個類的一個實例負責所有的由單個任務生成的數據查詢。換句話說,一個實例負責處理一個分區的數據在一個分布式的方式生成。
- 任何實現這個類必須是可序列化的,因為每個任務將得到一個新的serialized-deserialized提供對象的副本。因此,強烈建議任何寫作初始化數據(例如,打開一個連接或啟動一個事務)是後完成的
打開(…)
方法被稱為,這意味著任務準備生成數據。 - 的生命周期方法如下。
為每個分區與“partitionId”:每一批/時代流數據(如果它流查詢)和“epochId”:“開放(partitionId epochId)”方法。如果“開放”返回true:每一行的分區和批處理/時代,方法的過程(行)。方法“關閉(errorOrNull)”被稱為錯誤(如果有的話)出現在處理行。
重要的幾點注意事項:
- 火花並不能保證相同的輸出為(partitionId epochId),所以不能實現重複數據刪除(partitionId epochId)。如源提供不同數量的分區出於某種原因,火花優化改變分區數量,等等。參考火花- 28650為更多的細節。如果你需要重複數據刪除輸出,嚐試
foreachBatch
代替。 - 的
close ()
方法將調用open ()
方法返回成功(不管返回值),除了中間如果JVM崩潰。
Scala的例子:
datasetOfString.writeStream.foreach (新ForeachWriter [字符串){def打開(partitionId:長版本:長):布爾= {/ /打開連接}def過程記錄:字符串)= {/ /寫字符串連接}def關閉(errorOrNull: Throwable):單位= {/ /關閉連接}})
Java示例:
datasetOfString.writeStream () .foreach (新ForeachWriter <字符串> (){@Override公共布爾開放(長partitionId,長版){/ /打開連接}@Override公共空過程(字符串值){/ /寫字符串連接}@Override公共空白關閉(Throwable errorOrNull) {/ /關閉連接}});
- 自
-
2.0.0
- 類KeyValueGroupedDataset(K,V]擴展可序列化的
一個數據集已經被用戶指定分組關鍵邏輯分組。
一個數據集已經被用戶指定分組關鍵邏輯分組。用戶不應該建立一個KeyValueGroupedDataset直接,但應該調用
groupByKey
在現有的數據集。- 自
-
2.0.0
- 特征LowPrioritySQLImplicits擴展AnyRef
Scala對象轉化為低優先級的隱式方法數據集年代。
Scala對象轉化為低優先級的隱式方法數據集年代。值得一提的是衝突放置來消除歧義的決議。
值得一提的是包括特定的原因:newProductEncoder -消除歧義
列表
年代都是Seq
和產品
- 類觀察擴展AnyRef
助手類來簡化使用
數據集。觀察(字符串,列,列*)
: - 類RelationalGroupedDataset擴展AnyRef
- 特征行擴展可序列化的
代表一行輸出的關係操作符。
代表一行輸出的關係操作符。允許兩個通用的訪問順序,這將招致拳擊開銷原語,以及本地原始訪問。
無效的使用本機原始接口檢索的值為空,而不是一個用戶必須檢查
isNullAt
之前試圖檢索的值可能是零。創建一個新行,使用
RowFactory.create ()
在Java或Row.apply ()
在Scala中。一個行對象可以由提供字段值。例子:
進口org.apache.spark.sql._/ /創建一個行值。行(value1, value2, value3,…)/ /創建一個連續的Seq值。Row.fromSeq (Seq(value1, value2,…))
的值可以通過通用訪問一行訪問順序,這將招致拳擊開銷原語,以及本地原始訪問。一個通用的訪問順序的例子:
進口org.apache.spark.sql._瓦爾行=行(1,真正的,“字符串”,零)/ /行:行=[1,真的,一個字符串,零)瓦爾firstValue =行(0)/ / firstValue:任何= 1瓦爾fourthValue =行(3)/ / fourthValue:任何=零
對於本機原始訪問,這是無效的使用本機原始接口檢索的值為空,而不是一個用戶必須檢查
isNullAt
之前試圖檢索的值可能是零。本機原始訪問的一個例子:/ /使用行從前麵的示例。瓦爾firstValue = row.getInt (0)/ / firstValue: Int = 1瓦爾isNull = row.isNullAt (3)/ / isNull:布爾= true
在Scala中,字段中行對象可以提取模式匹配。例子:
進口org.apache.spark.sql._瓦爾對= sql (“從src選擇鍵,值”).rdd。{地圖情況下行(關鍵:Int價值:字符串)= >鍵- >值}
- 注釋
- @Stable ()
- 自
-
1.3.0
- 類RowFactory擴展AnyRef
- 注釋
- @Stable ()
- 類RuntimeConfig擴展AnyRef
為引發運行時配置界麵。
為引發運行時配置界麵。訪問,使用
SparkSession.conf
。選項設置有自動傳播到Hadoop在I / O配置。
- 注釋
- @Stable ()
- 自
-
2.0.0
- 類SQLContext擴展日誌記錄與可序列化的
處理結構化數據入口點(行和列)引發1. x。
處理結構化數據入口點(行和列)引發1. x。
2.0的火花,這是所取代SparkSession。然而,我們在這裏保持類的向後兼容性。
- 注釋
- @Stable ()
- 自
-
1.0.0
- 文摘類SQLImplicits擴展LowPrioritySQLImplicits
隱式轉換的方法常見的Scala對象的集合數據集年代。
隱式轉換的方法常見的Scala對象的集合數據集年代。
- 自
-
1.6.0
- 密封的抽象的最後類SaveMode擴展枚舉(SaveMode]
- 注釋
- @Stable ()
- 類SparkSession擴展可序列化的與Closeable與日誌記錄
入口點和數據集和DataFrame API編程火花。
入口點和數據集和DataFrame API編程火花。
環境中創建了這個前期(例如REPL,筆記本電腦),使用builder獲取現有的會話:
.getOrCreate SparkSession.builder () ()
建造者也可以用來創建一個新的會話:
SparkSession。建築部分(“本地”).appName (“字數統計”). config (“spark.some.config.option”,“有價值”).getOrCreate ()
- 注釋
- @Stable ()
- 類SparkSessionExtensions擴展AnyRef
::實驗::保持者注入指出SparkSession。
::實驗::保持者注入指出SparkSession。我們不保證兼容性關於二進製兼容性和穩定來源的方法。
現在提供以下擴展點:
- 分析儀的規則。
- 檢查分析規則。
- 優化器規則。
- 前國會預算辦公室的規則。
- 規劃策略。
- 自定義解析器。
- (外部)目錄的聽眾。
- 柱狀規則。
- 自適應查詢階段製備規則。
- 自適應查詢執行運行時優化規則。
擴展可以通過調用使用
withExtensions
在SparkSession.Builder,例如:SparkSession.builder()部分(“…”). config (“…”,真正的).withExtensions{擴展= >擴展。injectResolutionRule{會話= >…}擴展。injectParser{(會話,解析器)= >…}}.getOrCreate ()
還可以使用擴展SQL配置屬性通過設置火花
spark.sql.extensions
。可以設置多個擴展使用逗號分隔的列表。例如:SparkSession.builder()部分(“…”). config (“spark.sql.extensions”,“org.example.MyExtensions org.example.YourExtensions”).getOrCreate ()類MyExtensions擴展Function1 (SparkSessionExtensions,單位){覆蓋def應用(擴展:SparkSessionExtensions):單位={擴展。injectResolutionRule{會話= >…}擴展。injectParser{(會話,解析器)= >…}}}類YourExtensions擴展SparkSessionExtensionsProvider {覆蓋def應用(擴展:SparkSessionExtensions):單位={擴展。injectResolutionRule{會話= >…}extensions.injectFunction (…)}}
請注意,沒有一個建設者應該假定注入SparkSession完全初始化和不應該接觸到會話的內部(如SessionState)。
- 注釋
- @DeveloperApi () @Experimental () @Unstable ()
- 特征SparkSessionExtensionsProvider延伸(SparkSessionExtensions)⇒單位
::不穩定::
::不穩定::
基本特征實現所使用的SparkSessionExtensions
例如,現在我們有一個外部函數命名
年齡
SparkSession登記為一個擴展:包org.apache.spark.examples.extensions進口org.apache.spark.sql.catalyst.expressions。{CurrentDate、表達、RuntimeReplaceable, SubtractDates}情況下類年齡(歲生日:表情,孩子:表達式)擴展RuntimeReplaceable {def這(生日:表達式)=這生日(生日、SubtractDates (CurrentDate ()))覆蓋defexprsReplaced:Seq(表達式)=Seq(生日)覆蓋受保護的defwithNewChildInternal (newChild:表達式):表達=複製(newChild)}
我們需要創建擴展繼承SparkSessionExtensionsProvider例子:
包org.apache.spark.examples.extensions進口org.apache.spark.sql。{SparkSessionExtensions, SparkSessionExtensionsProvider}進口org.apache.spark.sql.catalyst.FunctionIdentifier進口org.apache.spark.sql.catalyst.expressions。{表達式,ExpressionInfo}類MyExtensions擴展SparkSessionExtensionsProvider {覆蓋def應用(v1: SparkSessionExtensions):單位= {v1。injectFunction ((新FunctionIdentifier (“年齡”),新名為[時代]. getname classOf ExpressionInfo (“年齡”),(孩子們:Seq(表達式))= >新年齡(children.head)))}}
然後,我們可以注入
MyExtensions
在三個方麵,- withExtensions的SparkSession.Builder
- 配置——spark.sql.extensions
- java.util.ServiceLoader——添加到src / main / resources / meta - inf /服務/ org.apache.spark.sql.SparkSessionExtensionsProvider
- 注釋
- @DeveloperApi () @Unstable () @Since (“3.2.0”)
- 自
-
3.2.0
- 另請參閱
-
java.util.ServiceLoader
- 類型策略=SparkStrategy
將一個邏輯計劃轉化為零個或多個SparkPlans。
將一個邏輯計劃轉化為零個或多個SparkPlans。這個API暴露實驗的查詢計劃並不是為了在火花版本是穩定的。開發人員編寫庫應該考慮使用提供的穩定的apiorg.apache.spark.sql.sources
- 注釋
- @DeveloperApi () @Unstable ()
- 類TypedColumn(- t,U]擴展列
一個列在一個編碼器給出了預期的輸入和返回類型。創建一個TypedColumn,可以使用
作為
函數在一個列。- T
-
這個表達式的輸入類型的預期。可以
任何
如果表達式類型檢查分析儀,而不是編譯器(即。expr(“總和(…)”)
)。 - U
-
這一列的輸出類型。
- 注釋
- @Stable ()
- 自
-
1.6.0
- 類UDFRegistration擴展日誌記錄
注冊用戶自定義函數的功能。
注冊用戶自定義函數的功能。使用
SparkSession.udf
訪問:spark.udf
- 注釋
- @Stable ()
- 自
-
1.3.0
- 特征WriteConfigMethods(R]擴展AnyRef
配置方法共同創建/替換操作,插入/重寫操作。
配置方法共同創建/替換操作,插入/重寫操作。
- R
-
建設者類型返回
- 自
-
3.0.0
值的成員
- 對象編碼器
方法來創建一個編碼器。
方法來創建一個編碼器。
- 自
-
1.6.0
- 對象觀察
(Scala-specific)通過Scala創建實例的觀察
應用
。(Scala-specific)通過Scala創建實例的觀察
應用
。- 自
-
3.3.0
- 對象行擴展可序列化的
- 注釋
- @Stable ()
- 自
-
1.3.0
- 對象SQLContext擴展可序列化的
這個SQLContext對象包含實用函數來創建一個單例SQLContext實例,或者獲取SQLContext創建實例。
這個SQLContext對象包含實用函數來創建一個單例SQLContext實例,或者獲取SQLContext創建實例。
它還提供了實用函數支持偏好對於線程在多個會話場景,setActive可以設置一個SQLContext當前線程,將返回getOrCreate全球而不是一個。
- 對象SparkSession擴展日誌記錄與可序列化的
- 注釋
- @Stable ()
- 對象功能
常用的函數用於DataFrame操作。
常用的函數用於DataFrame操作。使用函數定義在這裏提供一些編譯時安全,確保功能的存在。
火花也包括很多不常見的內置函數,在這裏沒有定義。你仍然可以訪問它們(和)所定義的所有函數使用
functions.expr ()
API和通過SQL表達式字符串調用它們。你可以找到整個列表的函數在火花的SQL API文檔的版本,也看到最新的列表作為一個例子,
isnan
這裏是一個函數定義。您可以使用isnan(坳(“myCol”))
來調用isnan
函數。這樣的編程語言的編譯器保證isnan
存在,是合適的形式。您還可以使用expr (“isnan (myCol)”)
函數調用相同的函數。在這種情況下,火花本身將確保isnan
存在分析查詢。regr_count
是一個函數的一個例子是內置的,但沒有定義,因為它是不常用的。調用它,使用expr (“regr_count (yCol xCol)”)
。這個函數api通常有方法
列
隻是因為它不僅可以支持簽名列
還有其他類型如原生字符串。目前由於曆史原因存在的其他變體。- 注釋
- @Stable ()
- 自
-
1.3.0