1. 程式人生 > 其它 >Spark DataFrame操作

Spark DataFrame操作

DataFrame在Spark 1.3時加入,其前身是Spark 1中的SQL Context、Streaming Context、Hive Context等物件,它類似於關係資料庫中的表,是行和列進行組織資料。
DataFrame相當是一張二維表,可以使用SparkSession中的各種函式來建立。

按照和上小節對Spark RDD的方式進行對Spark DataFrame進行說明,且由於Spark DataFrame是在Spark 2中新增的,
通過使用SparkSession進行建立,所以通過以下的步驟進行演示。

操作的對應的視訊如下,在騰訊課堂可免費檢視所有的視訊與下載簡介資料個人大資料平臺的搭建與學習實踐-PySpark-學習視訊教程-騰訊課堂 (qq.com)

1-開啟官方文件和JupyterLab
PySpark中SparkSession類的文件:https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.SparkSession.html
通過Jupyter-lab命令開啟jupyter notebook。

2-建立SparkSession物件
在5-2節中已經對SparkSession的方式進行了簡單的演示,它主要是通過類中Builder型別屬性進行構建SparkSession例項的。
如果想深入的瞭解Builder,可以通過文件上的原始碼連結跳轉到原始碼進行檢視。

import
findspark findspark.init() from pyspark.sql import SparkSession spark = SparkSession\ .builder\ .master('local')\ .appName("DataFrame")\ .getOrCreate() #getOrCreate獲取或建立

關於Builder屬性的原始碼

class Builder(object):
        """Builder for :class:`SparkSession`.
        
""" _lock = RLock() _options = {} _sc = None def config(self, key=None, value=None, conf=None): """Sets a config option. Options set using this method are automatically propagated to both :class:`SparkConf` and :class:`SparkSession`'s own configuration. .. versionadded:: 2.0.0 Parameters ---------- key : str, optional a key name string for configuration property value : str, optional a value for configuration property conf : :class:`SparkConf`, optional an instance of :class:`SparkConf` .....

3-通過SparkSession物件讀取資料生產DataFrame

通過上一步建立了SparkSession物件spark後,就可以它來建立Spark DataFrame資料型別了,通過函式是createDataFrame(data[, schema, …])。
文件中對函式中的data引數說明:可以是 RDD, list or pandas.DataFrame。或使用read屬性進行讀取資料,這部分知識點在Spark SQL小節中說明。

拷貝文件下載的例項程式碼進行執行,呼叫createDataFrame函式建立DataFrame資料的語句,注意語句中使用StructField定義表模型。
而StructType在函式說明中也提及了,可以調整到對應的文件中檢視。StructType -- > StructType --> StructField

from pyspark.sql.types import *
schema = StructType([
   StructField("name", StringType(), True),
   StructField("age", IntegerType(), True)])
df3 = spark.createDataFrame(rdd, schema)
df3.collect()
[Row(name='Alice', age=1)]

4-對DataFrame資料物件操作

可以檢視《Python大資料分析從入門到精通》中的PySpark DataFrame中的API示例。

開啟DataFrame Python文件:https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.DataFrame.html

DataFrame的屬性

功能函式分類

關聯處理函式-將兩個DataFrame進行連線。類似SQL中的關聯操作

排序統計