pyspark创建空的DataFrame

  • Post author:
  • Post category:其他




前言

做大数据分析时,经常会使用到空的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的方法。

参考:None



正文



创建没有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)

完。



版权声明:本文为u012762410原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。