当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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