RDD和DataFrame的格式转换

放肆的年华 提交于 2020-08-06 04:00:13

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!