PySpark 的 createDataFrame(~)
方法從給定列表、Pandas DataFrame 或 RDD 創建新的 DataFrame。
參數
1.data
| list-like
或 Pandas DataFrame
或 RDD
用於創建新 DataFrame 的數據。
2. schema
| pyspark.sql.types.DataType
、string
或 list
| 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|
+----+---+
相關用法
- Python PySpark SparkSession range方法用法及代碼示例
- Python PySpark SparkContext parallelize方法用法及代碼示例
- Python Django SpatialReference用法及代碼示例
- Python Django SpatialReference.__getitem__用法及代碼示例
- Python Django SplitArrayField.remove_trailing_nulls用法及代碼示例
- Python String count方法用法及代碼示例
- Python Scipy integrate.quadrature()用法及代碼示例
- Python Pandas Series str extractall方法用法及代碼示例
- Python Scipy stats.hypsecant.moment()用法及代碼示例
- Python Pandas Series str split方法用法及代碼示例
- Python String isnumeric方法用法及代碼示例
- Python String Center()用法及代碼示例
- Python Django SimpleTestCase.client用法及代碼示例
- Python Pandas Series to_list方法用法及代碼示例
- Python Django Signal用法及代碼示例
- Python String zfill方法用法及代碼示例
- Python String rstrip方法用法及代碼示例
- Python Scipy stats.hypsecant.median()用法及代碼示例
- Python Sympy Ellipse.equation()用法及代碼示例
- Python String decode()用法及代碼示例
- Python String轉Binary用法及代碼示例
- Python String count()用法及代碼示例
- Python Scipy stats.halfgennorm.fit()用法及代碼示例
- Python Tableau Server用法及代碼示例
- Python Sympy encloses_point()用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark SparkSession | createDataFrame method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。