RDD和DataFrame的格式转换
Spark 中最基本的数据抽象是 RDD。
RDD:弹性分布式数据集 (Resilient Distributed DataSet)。
DataFrame:从Spark1.3.0版本开始,DF开始被定义为指定到列的数据集(Dataset)。DFS类似于关系型数据库中的表或者像R/Python 中的data frame 。可以说是一个具有良好优化技术的关系表。DataFrame背后的思想是允许处理大量结构化数据。DataFrame包含带schema的行。schema是数据结构的说明。
本文主要介绍两种数据格式的互相转换
1.RDD转DataFrame
由于RDD内的数据有可能是非格式化的数据,所以需要先将RDD中的数据格式化后,设置schema,例如:
val file = path+"*.log.gz"
val rdd=spark.sparkContext.textFile(file)
val lines =rdd.map(log=>log.split(ExamConstants.LOG_SPILIT)).filter(logs=>JSON.parseObject(logs(1)).get("actId").equals("3000005")).map(
logs => {
var log = JSON.parseObject(logs(1))
var data = log.getJSONObject("data")
ExamLogInfo(data.getLong("examId"),log.getString("userId"),logs(0),logs(1))
}
)
import spark.implicits._
val logDf = examLogs.toDF()
在转换为DataFrame之前,需要引入spark.implicits._
如果是格式化的数据,直接添加schema即可:
rdd.toDF("subject_id", "subject_name")
2.DataFrame转换为RDD
dataFrame.rdd
以上是 RDD和DataFrame的格式转换 的全部内容, 来源链接: utcz.com/z/518735.html