一.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)