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()

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐