1.不使用JavaBean
object Demo3 extends LoggerTrait {
def main(args: Array[String]): Unit = {
// 1.通过自己写的工具类获取SparkSession对象
val spark: SparkSession = SparkUtils_My.getSparkSessionDefault(“demo3”)
// 2.RDD+Schema(表头)
// 2.1 spark底层是SparkCore,我们通过spark调用SparkCore加载List集合
// 2.1.1 RDD
val stuRDD: RDD[Row] = spark.sparkContext.parallelize(List(
Row(1, "zs", 21),
Row(2, "ls", 43),
Row(3, "ww", 56),
Row(4, "zl", 33)
))
// 2.2 Schema
val struct: StructType = StructType(List(
// 1.字段名称 2.字符的类型 3.是否可以为空
StructField("id", DataTypes.IntegerType, false),
StructField("name", DataTypes.StringType, false),
StructField("age", DataTypes.IntegerType, false)
)
)
// 创建Dataframe
val df: Dataframe = spark.createDataframe(stuRDD,struct)
df.show()
}
}
2.使用JavaBean
object Demo2 extends LoggerTrait {
def main(args: Array[String]): Unit = {
// 1.获取SparkSession对象
val spark: SparkSession = SparkSession.builder().master(“demo2”).master(“local[]").getOrCreate()
// 2.导入隐式转换
import spark.implicits._
// 3.创建List
val stuList = List(
new Student(1, “zs”, 12),
new Student(2, “ls”, 23),
new Student(3, “ww”, 25),
new Student(4, “zl”, 34)
)
// 将scala的list转成java的list
val stu: util.List[Student] = JavaConversions.seqAsJavaList(stuList)
// 创建dataframe
val df: Dataframe = spark.createDataframe(stu, classOf[Student])
// 打印表结构
df.printSchema()
// 打印表
df.show()
println("”*100)
// 创建一个表名
df.createOrReplaceTempView("stu")
// 执行sql
spark.sql(
"""
|select *
|from stu
|where age>20
|""".stripMargin).show()
}
}
class Student{
@BeanProperty var id:Int= _
@BeanProperty var name:String= _
@BeanProperty var age:Int= _
// 构造函数
def this(id:Int,name:String,age:Int){
this()// 第一行必须调用其他构造或者无参构造
this.id=id
this.name=name
this.age=age
}
}
@注意:javaBean必须是class类,不能是case class Student(样例类),虽然使用样例类代码不报错,但是加载不出数据



