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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Scala创建DataFrame的几种方式 -> 正文阅读

[大数据]Scala创建DataFrame的几种方式

1 通过数据源创建DF

原始数据:

{"name":"Tom","age":18},
{"name":"Alice","age":17}

步骤:

//读取目录文件
scala> val df = spark.read.json("file:///opt/module/spark/mycode/a.json")
df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

//创建临时视图
scala> df.createOrReplaceTempView("people")

//查看DF
scala> spark.sql("select * from people").show

//打印结果
+---+-----+
|age| name|
+---+-----+
| 18|  Tom|
| 17|Alice|
+---+-----+

2 通过反射机制创建DF

原始数据:

Tom,18
Alice,17

步骤:

//导入包,支持把一个RDD隐式转换为一个DataFrame
scala> import spark.implicits._ 

//1.创建样例类
case class People(name:String, age: Int)

//2.创建RDD
scala> val rdd = sc.textFile("file:///opt/module/spark/mycode/b.txt")
rdd: org.apache.spark.rdd.RDD[String] = file:///opt/module/spark/mycode/b.txt MapPartitionsRDD[1] at textFile at <console>:24

//3.使用map算子将每一行都创建一个People对象
scala> val df = rdd.map(_.split(",")).map(data=>People(data(0),data(1).toInt)).toDF
df: org.apache.spark.sql.DataFrame = [name: string, age: int]

//4.打印df
scala> df.show
+-----+---+
| name|age|
+-----+---+
|  Tom| 18|
|Alice| 17|
+-----+---+

注意,import spark.implicits._ 中的spark指的是SparkSession对象(在scala交互式环境中默认存在了一个SparkSession对象)。

启动spark-shell时的信息:
在这里插入图片描述

3 使用编程定义方式创建DF

当无法提前定义case class时,就需要采用编程方式定义RDD模式

//导入相关包
scala> import org.apache.spark.sql.types._
import org.apache.spark.sql.types._ 
scala> import org.apache.spark.sql.Row
import org.apache.spark.sql.Row 

//1.定义一个模式字符串
scala> val schemaString = "name age"
schemaString: String = name age

//2.根据模式字符串创建模式
scala> val fields = schemaString.split(" ").map(fieldName=>StructField(fieldName,StringType,nullable=true))
fields: Array[org.apache.spark.sql.types.StructField] = Array(StructField(name,StringType,true), StructField(age,StringType,true))

scala> val schema = StructType(fields)
schema: org.apache.spark.sql.types.StructType = StructType(StructField(name,StringType,true), StructField(age,StringType,true))

//3.将rdd的每条数据转换成Row类型
scala> val rowRDD = rdd.map(_.split(",")).map(data=>Row(data(0),data(1)))
rowRDD: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[19] at map at <console>:29

//4.根据设计的模式创建DF
scala> val df = spark.createDataFrame(rowRDD, schema)
df: org.apache.spark.sql.DataFrame = [name: string, age: string]

//5.打印
scala> df.show
+-----+---+                                                                     
| name|age|
+-----+---+
|  Tom| 18|
|Alice| 17|
+-----+---+
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:41:10  更:2021-11-30 15:42:25 
 
开发: 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/24 8:29:29-

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