IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SparkSQL篇(一) DataFrame创建 -> 正文阅读

[大数据]SparkSQL篇(一) DataFrame创建

DataFrame对象构成

层面对象 说明
结构StructType描述整个DataFrame的表结构
StructField描述一个列的信息
数据Column记录一列数据并包含列的信息
Row记录一行数据

在这里插入图片描述

DataFrame对象创建

  • people.txt文件内容如下
Hichael,29
Andy,30
Justin,19

2.1 基于RDD的创建方式一

又可称 从RDD转化为DafaFrame [利用反射机制推断RDD模式]

from pyspark.sql import SparkSession
from pyspark import SparkConf

if __name__ == '__main__':
    spark = SparkSession.builder\
        .config(conf= SparkConf())\
        .appName("CREATE DataFrame 01")\
        .master("local[*]")\
        .getOrCreate()

    sc = spark.sparkContext

    rdd = sc.textFile("./data/people.txt")\
        .map(lambda line : line.strip().split(","))\
        .map(lambda line : (line[0] , int(line[1])))
    df = spark.createDataFrame(rdd,schema= ['name' , 'age'])
    df.printSchema()
    df.show()
root
 |-- name: string (nullable = true)
 |-- age: long (nullable = true)

+-------+---+
|   name|age|
+-------+---+
|Hichael| 29|
|   Andy| 30|
| Justin| 19|
+-------+---+
    df = spark.createDataFrame(rdd)
    df.printSchema()
    df.show()
root
 |-- _1: string (nullable = true)
 |-- _2: long (nullable = true)

+-------+---+
|     _1| _2|
+-------+---+
|Hichael| 29|
|   Andy| 30|
| Justin| 19|
+-------+---+
  • show(n=20, truncate=True, vertical=False) API 说明
参数官方解释个人理解
nNumber of rows to show.指定显示DataFrame中的行数
truncateIf set to True, truncate strings longer than 20 chars by default. If set to a number greater than one, truncates long strings to length truncate and align cells right.默认为True,意为对列中数据截断,若列的字符长度超过20,便以…替代,设为False,便不再截断,全部显示
verticalIf set to True, print output rows vertically (one line per column value).若设为true,便竖直打印Row对象
  • 教材[林子雨 主编 Spark编程基础]示例
    将Rdd中字符串构造为 Row对象 ,从而在创建DataFrame时无需指定Schema
    构造Row对象时,形参名不可省略
from pyspark.sql import SparkSession
from pyspark import SparkConf
from pyspark.sql.types import Row


if __name__ == '__main__':
    spark = SparkSession.builder\
        .config(conf= SparkConf())\
        .appName("CREATE DataFrame 01")\
        .master("local[*]")\
        .getOrCreate()

    sc = spark.sparkContext

    rdd = sc.textFile("./data/people.txt")\
        .map(lambda line : line.strip().split(","))\
        .map(lambda line : Row(name = line[0] , age = int(line[1])))

    df = spark.createDataFrame(rdd)
    df.printSchema()
    df.show(2)
root
 |-- name: string (nullable = true)
 |-- age: long (nullable = true)

+-------+---+
|   name|age|
+-------+---+
|Hichael| 29|
|   Andy| 30|
+-------+---+
only showing top 2 rows

2.2 基于RDD的创建方式二

又可称 从RDD转化为DafaFrame [使用编程方式定义RDD模式]
创建表结构信息

from pyspark.sql import SparkSession
from pyspark import SparkConf
from pyspark.sql.types import *

if __name__ == '__main__':
    spark = SparkSession.builder\
        .config(conf= SparkConf())\
        .appName("CREATE DataFrame 01")\
        .master("local[*]")\
        .getOrCreate()

    sc = spark.sparkContext

    rdd = sc.textFile("./data/people.txt")\
        .map(lambda line : line.strip().split(","))\
        .map(lambda line : (line[0] , int(line[1])))

    schema = StructType()\
        .add("name" , StringType() , nullable=False)\
        .add("age" , IntegerType() , nullable=True)
    
    df = spark.createDataFrame(rdd,schema)
    df.printSchema()
    df.show()
root
 |-- name: string (nullable = false)
 |-- age: integer (nullable = true)

+-------+---+
|   name|age|
+-------+---+
|Hichael| 29|
|   Andy| 30|
| Justin| 19|
+-------+---+

2.3 基于RDD的创建方式三

使用rdd的 toDF()方法

from pyspark.sql import SparkSession
from pyspark import SparkConf
from pyspark.sql.types import *

if __name__ == '__main__':
    spark = SparkSession.builder\
        .config(conf= SparkConf())\
        .appName("CREATE DataFrame 01")\
        .master("local[*]")\
        .getOrCreate()

    sc = spark.sparkContext

    rdd = sc.textFile("./data/people.txt")\
        .map(lambda line : line.strip().split(","))\
        .map(lambda line : (line[0] , int(line[1])))

    schema = StructType()\
        .add("name" , StringType() , nullable=False)\
        .add("age" , IntegerType() , nullable=True)

    print("toDF中 传入一个参数: 列名列表[只传列名,类型自动推断,默认该列均为允许为空]")
    df = rdd.toDF([ "name" ,"age"])
    df.printSchema()
    df.show()

    print("toDF中 传入一个参数: 表结构[完整的schema描述对象StructType]")
    df = rdd.toDF(schema)
    df.printSchema()
    df.show()
toDF中 传入一个参数: 列名列表[只传列名,类型自动推断,默认该列均为允许为空]
root
 |-- name: string (nullable = true)
 |-- age: long (nullable = true)

+-------+---+
|   name|age|
+-------+---+
|Hichael| 29|
|   Andy| 30|
| Justin| 19|
+-------+---+

toDF中 传入一个参数: 表结构[完整的schema描述对象StructType]
root
 |-- name: string (nullable = false)
 |-- age: integer (nullable = true)

+-------+---+
|   name|age|
+-------+---+
|Hichael| 29|
|   Andy| 30|
| Justin| 19|
+-------+---+

2.4 基于RDD的创建方式四

文件
/usr/local/spark/examples/src/main/resources/people.json
无需创建,解压spark时便存在

from pyspark.sql import SparkSession
from pyspark import SparkConf

if __name__ == '__main__':
    spark = SparkSession.builder\
        .config(conf = SparkConf())\
        .appName("pandas")\
        .master("local[*]")\
        .getOrCreate()

    df = spark.read.json("/usr/local/spark/examples/src/main/resources/people.json")
    df.printSchema()
    df.show()
root
 |-- age: long (nullable = true)
 |-- name: string (nullable = true)

+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

2.5 基于pandas的创建方式

import pandas as pd
from pyspark.sql import SparkSession
from pyspark import SparkConf

if __name__ == '__main__':
    spark = SparkSession.builder\
        .config(conf = SparkConf())\
        .appName("pandas")\
        .master("local[*]")\
        .getOrCreate()

    df = pd.read_csv("./data/people.txt" , names = ["name" , "age"] ,header=None)
    df = spark.createDataFrame(df)
    df.printSchema()
    df.show()
root
 |-- name: string (nullable = true)
 |-- age: long (nullable = true)

+-------+---+
|   name|age|
+-------+---+
|Hichael| 29|
|   Andy| 30|
| Justin| 19|
+-------+---+
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:58:25  更:2022-05-10 12:01:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:00:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码