當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python PySpark SparkSession createDataFrame方法用法及代碼示例

PySpark 的 createDataFrame(~) 方法從給定列表、Pandas DataFrame 或 RDD 創建新的 DataFrame。

參數

1.data | list-likePandas DataFrameRDD

用於創建新 DataFrame 的數據。

2. schema | pyspark.sql.types.DataTypestringlist | optional

列名和每列的數據類型。

3. samplingRatio | float | optional

如果未通過 schema 提供數據類型,則 samplingRatio 指示在推斷列類型時要采樣的行的比例。默認情況下,僅第一行將用於類型推斷。

4. verifySchema | boolean | optional

是否根據給定模式檢查數據。如果數據類型不對齊,則會拋出錯誤。默認情況下,verifySchema=True

返回值

PySpark 數據幀。

例子

從列表列表創建 PySpark DataFrame

要從列表列表創建 PySpark DataFrame:

rows = [["Alex", 25], ["Bob", 30]]
df = spark.createDataFrame(rows)
df.show()



+----+---+
|  _1| _2|
+----+---+
|Alex| 25|
| Bob| 30|
+----+---+

要從具有指定列名的列表列表創建 PySpark DataFrame:

rows = [["Alex", 25], ["Bob", 30]]
df = spark.createDataFrame(rows, ["name", "age"])
df.show()



+----+---+
|name|age|
+----+---+
|Alex| 25|
| Bob| 30|
+----+---+

使用列名稱和類型創建 PySpark DataFrame

要創建具有列名稱和類型的 PySpark DataFrame:

rows = [["Alex", 25], ["Bob", 30]]
df = spark.createDataFrame(rows, "name:string, age:int")
df.show()



+----+---+
|name|age|
+----+---+
|Alex| 25|
| Bob| 30|
+----+---+

從值列表創建 PySpark DataFrame

要從值列表創建 PySpark DataFrame:

from pyspark.sql.types import *
vals = [3,4,5]
spark.createDataFrame(vals, IntegerType()).show()



+-----+
|value|
+-----+
|    3|
|    4|
|    5|
+-----+

這裏,IntegerType() 表示該列的類型為整數 - 在這種情況下需要這樣做,否則 PySpark 將引發錯誤。

從元組列表創建 PySpark DataFrame

要從元組列表創建 PySpark DataFrame:

rows = (("Alex", 25), ("Bob", 30))
df = spark.createDataFrame(rows, ["name", "age"])
df.show()



+----+---+
|name|age|
+----+---+
|Alex| 25|
| Bob| 30|
+----+---+

從對象列表創建 PySpark DataFrame

要從對象列表創建 PySpark DataFrame:

data = [{"name":"Alex", "age":20},{"name":"Bob", "age":30}]
df = spark.createDataFrame(data)
df.show()



+---+----+
|age|name|
+---+----+
| 20|Alex|
| 30| Bob|
+---+----+

從 RDD 創建 PySpark DataFrame

要從 RDD 創建 PySpark DataFrame:

rdd = sc.parallelize([["Alex", 25], ["Bob", 30]])
df = spark.createDataFrame(rdd, ["name", "age"])
df.show()



+----+---+
|name|age|
+----+---+
|Alex| 25|
| Bob| 30|
+----+---+

在這裏,我們使用 parallelize(~) 方法創建一個RDD。

從 Pandas DataFrame 創建 PySpark DataFrame

考慮以下 Pandas DataFrame:

import pandas as pd
df = pd.DataFrame({"A":[3,4],"B":[5,6]})
df



   A  B
0  3  5
1  4  6

要從此 Pandas DataFrame 創建 PySpark DataFrame:

pyspark_df = spark.createDataFrame(df)
pyspark_df.show()



+---+---+
|  A|  B|
+---+---+
|  3|  5|
|  4|  6|
+---+---+

使用架構(StructType)創建PySpark DataFrame

要在指定列名稱和類型的同時創建 PySpark DataFrame:

from pyspark.sql.types import *
schema = StructType([
 StructField("name", StringType()),
 StructField("age", IntegerType())])
rows = [["Alex", 25], ["Bob", 30]]
df = spark.createDataFrame(rows, schema)
df.show()



+----+---+
|name|age|
+----+---+
|Alex| 25|
| Bob| 30|
+----+---+

這裏,name 是字符串類型,age 是整數類型。

創建帶有日期列的 PySpark DataFrame

要創建帶有 date 列的 PySpark DataFrame,請使用 datetime 庫:

import datetime
df = spark.createDataFrame([["Alex", datetime.date(1995,12,16)], ["Bob", datetime.date(1995,5,9)]], ["name", "birthday"])
df.show()



+----+----------+
|name|  birthday|
+----+----------+
|Alex|1995-12-16|
| Bob|1995-05-09|
+----+----------+

指定verifySchema

默認情況下, verifySchema=True ,這意味著如果 schema 指示的類型與從 data 推斷的類型不匹配,則會引發錯誤:

from pyspark.sql.types import *
schema = StructType([
 StructField("name", IntegerType()),
 StructField("age", IntegerType())])
rows = [["Alex", 25], ["Bob", 30]]
df = spark.createDataFrame(rows, schema)   # verifySchema=True
df.show()



org.apache.spark.api.python.PythonException:
'TypeError: field name: IntegerType can not accept object 'Alex' in type <class 'str'>'

這裏,拋出一個錯誤,因為 name 列的推斷類型是 string ,但我們在 schema 中將列類型指定為 integer

通過設置 verifySchema=False , PySpark 將用空值填充列而不是拋出錯誤:

from pyspark.sql.types import *
schema = StructType([
 StructField("name", IntegerType()),
 StructField("age", IntegerType())])
rows = [["Alex", 25], ["Bob", 30]]
df = spark.createDataFrame(rows, schema, verifySchema=False)
df.show()



+----+---+
|name|age|
+----+---+
|null| 25|
|null| 30|
+----+---+

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark SparkSession | createDataFrame method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。