if __name__ == '__main__':
spark = SparkSession.builder.master('local[*]').appName('create_park').getOrCreate()
# dataframe的创建方式
# 1.rdd转换的六种方式
sc = spark.sparkContext
rdd1 = sc.parallelize([('c01', '张三', 20), ('c02', '李四', 15), ('c03', '王五', 26), ('c01', '赵六', 30)])
rdd2 = rdd1.filter(lambda x: x[0] != 'c01')
# schema = StructType()\
# .add('id',StringType(),True)\
# .add('name',StringType(),False)\
# .add('age',IntegerType())
st = StructType([
# 字段名 字段类型 字段是否可以为空
StructField("id", StringType(), True),
StructField("name", StringType(), True),
StructField("age", IntegerType())
])
# 1.显式的指定schema
df1 = spark.createDataFrame(rdd2, schema=st)
df1.show()
# 2.指定字段名,让spark自己进行类型推断
df2 = spark.createDataFrame(rdd2, schema=["id", "name", "age"])
df2.show()
df2.printSchema()
# 3.直接创建df,不指定字段名 默认为_1 _2 _3
df3 = spark.createDataFrame(rdd2)
df3.show()
df3.printSchema()
# 4.rdd直接调用toDF方法 也是三种 不指定schema 指定字段名 手动指定schema
df4 = rdd2.toDF()
df5 = rdd2.toDF(schema=["id", "name", "age"])
df6 = rdd2.toDF(schema=st)
# 2.将pandas的DF对象转换为dataframe的方式
# 当处理的数据源比较特殊的时候, 比如 Excel格式, 此时可以通过pandas的DF直接读取, 然后转换为 spark的DF进行处理, 从而扩充spark的读取的数据源
pd_df = pd.DataFrame({'id': ['c01', 'c02', 'c03'], 'name': ['张三', '李四', '王五']})
p_df = spark.createDataFrame(pd_df)
p_df.show()
# 3.通过读取外部文件进行创建 这种方式的具体代码不需要记 用的时候查一下就可以了
# df_init = spark.read\
# .format('csv')\
# .option('sep',',') \
# .option('header', True) \
# .option('inferSchema', True) \
# .option('encoding', 'UTF-8') \
# .load('file:///export/data/workspace/sz30_pyspark_parent/_03_pyspark_sql/data/stu.csv')
# spark.read.csv()
# spark.read.text()
# spark.read.json()
# spark.read.orc()
pyspark中创建DF的方法:RDD、Pandas、读取文件
于 2024-02-20 20:58:58 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)