做大數(shù)據(jù)分析時,經(jīng)常會使用到空的DataFrame,直接給spark.createDataFrame傳遞空的Pandas DataFrame會報錯:
spark.createDataFrame(data=pd.DataFrame(data=None,columns=['pageid','uid']))
# 報錯:
ValueError: can not infer schema from empty dataset
因此總結(jié)了幾種可以成功創(chuàng)建空的spark DataFrame的方法。
參考:None
正文 創(chuàng)建沒有schema的DataFramedf_empty = spark.createDataFrame([], StructType([]))
df_empty.printSchema()
"""
輸出:
root
"""
創(chuàng)建有schema的DataFrame創(chuàng)建schema:
from pyspark.sql.types import StructType,StructField, StringType
schema = StructType([
StructField('pageid', StringType(), True),
StructField('uid', StringType(), True)
])
# 查看schema
print(schema.simpleString())
"""
輸出:
struct"""
直接創(chuàng)建空的DataFrame
法1:直接傳遞 [ ]df_empty1 = spark.createDataFrame([], schema)
df_empty1.printSchema()
"""
輸出:
root
|-- pageid: string (nullable = true)
|-- uid: string (nullable = true)
"""
通過空RDD創(chuàng)建空DataFrame可以通過兩種方式創(chuàng)建空的rdd:
rdd1 = spark.sparkContext.emptyRDD()
rdd2 = spark.sparkContext.parallelize([])
法2:通過spark.createDataFrame(rdd)函數(shù)df_empty2 = spark.createDataFrame(rdd1,schema)
df_empty2.printSchema()
"""
輸出:
root
|-- pageid: string (nullable = true)
|-- uid: string (nullable = true)
"""
法3:通過rdd.toDF函數(shù)df_empty3 = rdd1.toDF(schema)
df_empty3.printSchema()
"""
輸出:
root
|-- pageid: string (nullable = true)
|-- uid: string (nullable = true)
"""
總結(jié)推薦使用通過“法1”,流程簡單:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([
StructField('pageid', StringType(), True),
StructField('uid', StringType(), True)
])
df_empty1 = spark.createDataFrame([], schema)
完。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧