将Spark RDD转换为Spark DataFrame有几种常见方法

一.toDf

转后列名不用重写

适用于RDD,本地集合,其他 DataFrame,数据源文件,Hive 表。。。。。

import org.apache.spark.sql.SparkSession

// 创建 SparkSession
val spark = SparkSession.builder()
  .appName("RDDtoDF Example")
  .master("local[*]")
  .getOrCreate()

import spark.implicits._

// 定义 case class
case class Person(name: String, age: Int)

// 创建 RDD
val personRDD = spark.sparkContext.parallelize(Seq(
  Person("Alice", 25),
  Person("Bob", 30),
  Person("Charlie", 35)
))

// 将 RDD 转换为 DataFrame
val personDF = personRDD.toDF()

// 显示结果
personDF.show()

二.使用 toDF 方法和列名

不规定列名,程序会自动给

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
  .appName("RDDtoDF Example")
  .master("local[*]")
  .getOrCreate()

import spark.implicits._

// 创建元组 RDD
val tupleRDD = spark.sparkContext.parallelize(Seq(
  ("Apple", 1000, 2.5),
  ("Banana", 1500, 1.8),
  ("Orange", 800, 3.0)
))

// 将 RDD 转换为 DataFrame,并指定列名
val fruitDF = tupleRDD.toDF("fruit", "quantity", "price")

// 显示结果
fruitDF.show()

三.使用 createDataFrame 方法和显式 Schema

createDataFrame 方法的主要参数包括:

  • data:要转换为 DataFrame 的数据源,可以是 RDD、本地集合等。
  • schema:定义 DataFrame 的结构,通常是一个 StructType 对象,包含列名和数据类型。
import org.apache.spark.sql.{Row, SparkSession}
import org.apache.spark.sql.types._

val spark = SparkSession.builder()
  .appName("RDDtoDF Example")
  .master("local[*]")
  .getOrCreate()

// 创建 RDD[Row]
val rowRDD = spark.sparkContext.parallelize(Seq(
  Row("David", 28, "Male"),
  Row("Emma", 24, "Female"),
  Row("Frank", 32, "Male")
))

// 定义 Schema
val schema = StructType(Array(
  StructField("name", StringType, nullable = false),
  StructField("age", IntegerType, nullable = false),
  StructField("gender", StringType, nullable = false)
))

// 将 RDD 转换为 DataFrame
val employeeDF = spark.createDataFrame(rowRDD, schema)


// 显示结果
employeeDF.show()


val logDF = spark.createDataFrame(row.map(Row.fromTuple), logs_schema)
  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值