Spark2.x Scala Class创建DataFrame

一、问题分析

       注:此处的普通类指的是scala中定义的非case class的类框架在底层将其视作java定义的标准bean类型来处理而scala中定义的普通bean类,不具备字段的java标准getters和setters,因而会处理失败,可以通过【@BeanProperty】来解决

二、@BeanProperty分析

package scala.beans

/** When attached to a field, this annotation adds a setter and a getter
 *  method following the Java Bean convention. For example:
 *  {{{
 *    @BeanProperty
 *    var status = ""
 *  }}}
 *  adds the following methods to the class:
 *  {{{
 *    def setStatus(s: String) { this.status = s }
 *    def getStatus: String = this.status
 *  }}}
 *  For fields of type `Boolean`, if you need a getter named `isStatus`,
 *  use the `scala.beans.BooleanBeanProperty` annotation instead.
 */
@scala.annotation.meta.field
class BeanProperty extends scala.annotation.StaticAnnotation

三、Scala Class创建DataFrame代码

package blog

import scala.beans.BeanProperty

/**
 * @author: 余辉  
 * @blog: https://blog.csdn.net/silentwolfyh
 * @create: 2019-12-29 11:25
 * @description:
 **/
class StuScala(
                @BeanProperty
                val id: Int,

                @BeanProperty
                val name: String,

                @BeanProperty
                val age: Int,

                @BeanProperty
                val city: String,

                @BeanProperty
                val score: Double)

object StuScala {
  def apply(id: Int, name: String, age: Int, city: String, score: Double): StuScala =
    new StuScala(id, name, age, city, score)
}
package blog

import cn.doit.sparksql.day01.utils.SparkUtils
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
 * @author: 余辉  
 * @blog: https://blog.csdn.net/silentwolfyh
 * @create: 2019-12-29 11:23
 * @description:
 **/
object DF04_Create_scala_Class {

  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkUtils.getSparkSession()

    val rdd: RDD[String] = spark.sparkContext.textFile("spark_sql/doc/stu.csv")
    val data: RDD[StuScala] = rdd.map(line => {
      val arr = line.split(",")
      StuScala(arr(0).toInt, arr(1), arr(2).toInt, arr(3), arr(4).toDouble)
    })

    val frame: DataFrame = spark.createDataFrame(data, classOf[StuScala])
    frame.printSchema()
    frame.show()
  }
}

四、结果展示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值