DataFrame 创建方式和操作(Spark 中的核心知识,用来计算结构化数据)



一、 scala版本


1.1:javabean类型的rdd创建

         val sparkConf = new SparkConf().setMaster("local").setAppName("adaa")

         val sc = new SparkContext(sparkConf)

         

         var sqlcontext = new SQLContext(sc)

         

         

         var rdd:RDD[Emp]= sc.parallelize(Array(

             "1 zhangsan 3000 20",

             "2 lisi     4000 10",

             "3 wangwu   8000 20",

             "4 zhaoliu  1000 20"

          )).flatMap(line =>{

             var arr = line.split("\\s+")

             

             var empno:Int = arr(0).toInt

             var ename:String  = arr(1)

             var sal:Int = arr(2).toInt

             var deptno:Int = arr(3).toInt

             Array(Emp(empno,ename,sal,deptno))

          }    

         

         var dataframe = sqlcontext.createDataFrame(rdd, Class.forName("a.Emp"))



  注意: 

1. var rdd:RDD[Emp] ,此变量中存放的是Emp类的对象,

所以,在通过RDD创建DataFrame时需要相应的加载Emp的类,此操作的语句即:sqlcontext.createDataFrame(rdd, Class.forName("a.Emp"))

Class.forName("a.Emp") 是类加载器,来加载rdd中存储的元素的类。

 2.rdd.flatmap这个算子,参数是一个函数,这个函数的作用就是将rdd中的每个元素变成Array类型的数组,在flatmap隐藏的代码中会将每个小数组都遍历一遍,放入我们的大数组中,就是将集合压成一个。




#    registerTempTable注册成为一张表,从而可以通过DataFrame的sql算子进行数据库的操作。

#在sql语句中的 列名(empno)是怎么来的哪?

是取自createDataFrame(rdd, Class.forName("a.Emp")), 这个类a.Emp的get方法名(def getEmpno = eno),去掉get首字母小写得到的。一定要注意,这是一个默认的取列名的方式。


    

       dataframe.registerTempTable("emp")

         
         var newdataframe = sqlcontext.sql("select empno from emp")
         
         newdataframe.show()
         
   
   }

}

 

 

1.1中要用的类



package a





// "1 zhangsan 3000 20",
class Emp(empno:Int,ename:String,sal:Int,deptno:Int) {
  
   def this(){
      this(0,null,0,0)
   }
   
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值