【博学谷学习记录】超强总结,用心分享|狂野大数据课程【DataFrame详解】的总结分析

1 DataFrame基本介绍

在这里插入图片描述

一个dataFrame表示是一个二维的表, 一个二维表, 必然存在 行 列 表结构描述信息

表结构描述信息(元数据):  StructType
	字段: StructField  
		定义: 字段的名称, 字段的类型, 字段是否可以为Null

认为: 在一个StructType对象下, 由多个StructField组成的, 构建了一个完整的元数据信息

行: Row对象

列: Column对象


注意: dataFrame本质上就是一个RDD, 只是对RDD进行包装, 在其基础上添加schema元数据信息,从而处理结构化数据

如何构建表结构信息:

在这里插入图片描述

2 DataFrame的构建方式

  • 方式一: 通过RDD得到一个dataFrame
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
from pyspark.sql.types import *
import os

# 锁定远端环境, 确保环境统一
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'

if __name__ == '__main__':
    print("如何获取DF对象方式一: 通过RDD得到DF对象")

    # 1. 创建SparkSession对象
    spark = SparkSession.builder.master('local[*]').appName('get_df_01').getOrCreate()

    sc = spark.sparkContext

    # 2- 构建RDD的数据集
    rdd = sc.parallelize(['张三 20', '李四 18', '王五 23'])

    # 3. 对数据进行处理操作
    # [('张三', '20'), ('李四', '18'), ('王五', '23')]
    rdd_map = rdd.map(lambda name_age:(name_age.split()[0],int(name_age.split()[1])))

    # 4. 将RDD转换为DF
    # 4.1 方案一:

    # schema元数据定义方式一:
    schema = StructType()\
        .add('name', StringType())\
        .add('age', IntegerType())

    # schema元数据定义方式二:
    schema = StructType(fields=[
        StructField('name',StringType(),True),
        StructField('age',IntegerType(),False)
    ])

    df = spark.createDataFrame(data=rdd_map,schema=schema)
    df.printSchema()
    df.show()

    df = spark.createDataFrame(data=rdd_map,schema='name string,age integer')
    df.printSchema()
    df.show()

    df = spark.createDataFrame(data=rdd_map, schema=['name','age']) # 自动类型推断, 但是一般推断类型比较大
    df.printSchema()
    df.show()

    # 4.2  方案二: 
    df = rdd_map.toDF(schema=schema)
    df.printSchema()
    df.show()

    df = rdd_map.toDF(schema='name string,age integer')
    df.printSchema()
    df.show()

    df = rdd_map.toDF(schema=['name','age'])
    df.printSchema()
    df.show()

场景: 当我们数据是半结构化的数据, 或者结构不完整的数据, 此时先通过Spark RDD程序来读取数据集, 将数据集基于RDD的算子完成预处理操作, 将数据转换为结构化的数据, 最后通过Spark SQL来进行最终统计处理操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值