pyspark创建空的DataFrame
Posted November丶Chopin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyspark创建空的DataFrame相关的知识,希望对你有一定的参考价值。
目录
前言
做大数据分析时,经常会使用到空的DataFrame,直接给spark.createDataFrame传递空的Pandas DataFrame会报错:
spark.createDataFrame(data=pd.DataFrame(data=None,columns=['pageid','uid']))
# 报错:
ValueError: can not infer schema from empty dataset
因此总结了几种可以成功创建空的spark DataFrame的方法。
正文
创建没有schema的DataFrame
df_empty = spark.createDataFrame([], StructType([]))
df_empty.printSchema()
"""
输出:
root
"""
创建有schema的DataFrame
创建schema:
from pyspark.sql.types import StructType,StructField, StringType
schema = StructType([
StructField('pageid', StringType(), True),
StructField('uid', StringType(), True)
])
# 查看schema
print(schema.simpleString())
"""
输出:
struct<pageid:string,uid:string>
"""
直接创建空的DataFrame
法1:直接传递 [ ]
df_empty1 = spark.createDataFrame([], schema)
df_empty1.printSchema()
"""
输出:
root
|-- pageid: string (nullable = true)
|-- uid: string (nullable = true)
"""
通过空RDD创建空DataFrame
可以通过两种方式创建空的rdd:
rdd1 = spark.sparkContext.emptyRDD()
rdd2 = spark.sparkContext.parallelize([])
法2:通过spark.createDataFrame(rdd)函数
df_empty2 = spark.createDataFrame(rdd1,schema)
df_empty2.printSchema()
"""
输出:
root
|-- pageid: string (nullable = true)
|-- uid: string (nullable = true)
"""
法3:通过rdd.toDF函数
df_empty3 = rdd1.toDF(schema)
df_empty3.printSchema()
"""
输出:
root
|-- pageid: string (nullable = true)
|-- uid: string (nullable = true)
"""
总结
推荐使用通过“法1”,流程简单:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([
StructField('pageid', StringType(), True),
StructField('uid', StringType(), True)
])
df_empty1 = spark.createDataFrame([], schema)
完。
以上是关于pyspark创建空的DataFrame的主要内容,如果未能解决你的问题,请参考以下文章
PySpark - 从 Numpy 矩阵创建 DataFrame
如何为现有 DataFrame 创建新行?在 PySpark 或 Scala 中
PySpark:是不是有可能根据非 Null 值创建动态数量的 DataFrame