spark下rdd和dataframe以及sqlcontext之间相互转换

直接看代码

import org.apache.spark.sql.{DataFrame, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * wo xi huan xie dai ma
  * Created by wangtuntun on 16-5-7.
  */
object clean {

  def main(args: Array[String]) {

    //设置环境
    val conf=new SparkConf().setAppName("tianchi").setMaster("local")
    val sc=new SparkContext(conf)
    val sqc=new SQLContext(sc)

    case class user_pay_class(shop_id:String,user_id:String,DS:String)//注册一个类

    val user_pay_raw=sc.textFile("/home/wangtuntun/user_pay.txt")
    val user_pay_split=user_pay_raw.map(_.split(","))
    val user_transform =user_pay_split.map{ x=>    //数据转换
      val userid=x(0)
      val shop_id=x(1)
      val ts=x(2)
      val ts_split=ts.split(" ")
      val year_month_day=ts_split(0).split("-")
      val year=year_month_day(0)
      val month=year_month_day(1)
      val day=year_month_day(2)
//      (shop_id,userid,year,month,day)
      (shop_id,userid,ts_split(0))
    }
    val df=sqc.createDataFrame(user_transform)  // 生成一个dataframe
    val df_name_colums=df.toDF("shop_id","userid","DS")  //给df的每个列取名字
    df_name_colums.registerTempTable("user_pay_table")     //注册临时表
    val sql="select shop_id,count(userid),DS from user_pay_table group by shop_id,DS order by shop_id desc,DS"
    val rs: DataFrame =sqc.sql(sql)
    rs.foreach(x=>println(x))
//    user_transform.saveAsTextFile("/home/wangtuntun/test_file4.txt")
    val rs_rdd=rs.map( x=>( x(0),x(1),x(2) ) )         //rs转为rdd
    rs_rdd.saveAsTextFile("/home/wangtuntun/test_file5.txt")
    sc.stop();

  }


}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值