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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。