一:RDD与DataFrame互相转换

1.总纲

  

二:DataFrame转换为RDD

1.rdd

  使用schema可以获取DataFrame的schema

  使用rdd可以获取DataFrame的数据

三:RDD转换为DataFrame

1.第一种方式

  使用反射,

  RDD的数据类型必须是case class。

  1. import sqlContext.implicits._ //如果不写,下面的转换不成功
  2.  
  3. //transform
  4. val path="/spark/logs/input"
  5. val rdd=sc.textFile(path)
  6. val apacheAccessDataFrame=rdd
  7. .filter(line=>ApacheAccessLog.isValidateLogLine(line))
  8. .map(line => {
  9. ApacheAccessLog.parseLogLine(line)
  10. }).toDF() //rdd转换为DataFrame

  其中,ApacheAccessLog.parseLogLine(line)是case class类型。

2:第二种方式

  1. package com.scala.it
  2. import org.apache.spark.rdd.RDD
  3. import org.apache.spark.sql.types._
  4. import org.apache.spark.sql.{Row, SQLContext}
  5. import org.apache.spark.{SparkConf, SparkContext}
  6. object CreateDataFrameDemo {
  7. def main(args: Array[String]): Unit = {
  8. val conf = new SparkConf()
  9. .setMaster("local[*]")
  10. .setAppName("hive-join-mysql")
  11. // 使用kryo序列化机制
  12. conf.registerKryoClasses(Array(classOf[Row], classOf[Tuple3[Int, String, Double]]))
  13. val sc = SparkContext.getOrCreate(conf)
  14.  
  15. val sqlContext = new SQLContext(sc)
  16.  
  17. // ===================================
  18. // RDD中Row中的各个列的类型必须是一致的(不能有歧义)
  19. val rdd: RDD[Row] = sc.parallelize(Array(
  20. (1, "Tom", 1234.1),
  21. (2, "Lili", 12532.2),
  22. (3, "Gerry", 123.0)
  23. )).map {
  24. case (id, name, salary) => {
  25. Row(id, name, salary)
  26. }
  27. }
  28. val schema: StructType = StructType(Array(
  29. StructField("id", IntegerType),
  30. StructField("name", StringType),
  31. StructField("salary", DoubleType)
  32. ))
  33.  
  34. val df = sqlContext.createDataFrame(rdd, schema)
  35. df.show()
  36. }
  37. }

3.解释上面的程序

  产生RDD有两种方式,读取数据源,或者序列化

  这里使用序列化产生RDD。

  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  关于rdd中为什么要使用Row:

  

  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  关于StructType:

  

  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  关于StructField:

    其中,后两个是默认参数,可以不给。

  

  

045 RDD与DataFrame互相转换的更多相关文章

  1. RDD与DataFrame的转换

    RDD与DataFrame转换1. 通过反射的方式来推断RDD元素中的元数据.因为RDD本身一条数据本身是没有元数据的,例如Person,而Person有name,id等,而record是不知道这些的 ...

  2. 转】RDD与DataFrame的转换

    原博文出自于: http://www.cnblogs.com/namhwik/p/5967910.html RDD与DataFrame转换1. 通过反射的方式来推断RDD元素中的元数据.因为RDD本身 ...

  3. RDD&Dataset&DataFrame

    Dataset创建 object DatasetCreation { def main(args: Array[String]): Unit = { val spark = SparkSession ...

  4. 36、将RDD转换为DataFrame

    一.概述 为什么要将RDD转换为DataFrame? 因为这样的话,我们就可以直接针对HDFS等任何可以构建为RDD的数据,使用Spark SQL进行SQL查询了.这个功能是无比强大的. 想象一下,针 ...

  5. spark-DataFrame之RDD和DataFrame之间的转换

    package cn.spark.study.core.mycode_dataFrame; import java.io.Serializable;import java.util.List; imp ...

  6. RDD、DataFrame、Dataset三者三者之间转换

    转化: RDD.DataFrame.Dataset三者有许多共性,有各自适用的场景常常需要在三者之间转换 DataFrame/Dataset转RDD: 这个转换很简单 val rdd1=testDF. ...

  7. RDD、DataFrame和DataSet的区别

    原文链接:http://www.jianshu.com/p/c0181667daa0 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同. RDD ...

  8. 谈谈RDD、DataFrame、Dataset的区别和各自的优势

    在spark中,RDD.DataFrame.Dataset是最常用的数据类型,本博文给出笔者在使用的过程中体会到的区别和各自的优势 共性: 1.RDD.DataFrame.Dataset全都是spar ...

  9. spark RDD,DataFrame,DataSet 介绍

    弹性分布式数据集(Resilient Distributed Dataset,RDD) RDD是Spark一开始就提供的主要API,从根本上来说,一个RDD就是你的数据的一个不可变的分布式元素集合,在 ...

随机推荐

  1. IOS 常遇到的报错警告 以及 解决办法

    1.  This application is modifying the autolayout engine from a background thread, which can lead to ...

  2. Confluence 6 整合到支持的附件存储选项

    如果你现在正在存储附件到 WebDav 或者你的数据库中.你可以整合附件的存储到文件系统中.当你的附件从数据库中被合并到文件系统后,你存储在数据库中的附件数据就可以从数据库中删除了. 当附件合并进行的 ...

  3. django中数据库的配置及相关增删改查

    ORM ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 类名对应---- ...

  4. package.json包描述文件说明

    //commonjs包规范-说明 { "name": "leyi",//包名,不允许空格 "description": "hell ...

  5. css样式之补充。。。

    css常用的一些属性: 1.去掉下划线 :text-decoration:none ;2.加上下划线: text-decoration: underline; 3.调整文本和图片的位置(也就是设置元素 ...

  6. 1283: 骨牌铺方格(zzuli)

    Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图: Input ...

  7. TypeError: $(…).tooltip is not a function

    问题描述:改了一个页面,发现进入这个页面的时候就一直在load···,F12看了一下,发现报了这个错误TypeError: $(…).tooltip is not a function,然后我就百度了 ...

  8. 条件为空的sql你们写过么 (我也是醉了碰到了这种需求,当时还真有点o((⊙﹏⊙))o懵逼.jpg)

    需求描述:单表,父子关系,有个统一的主键dict_id和一个父级别的parent_id,查询父级别的字典名称,parent_id是空,本渣用的是mybatis奥!!! 废话不多说,直接上代码mappe ...

  9. Laravel 项目中编写第一个 Vue 组件

    和 CSS 框架一样,Laravel 不强制你使用什么 JavaScript 客户端框架,但是开箱对 Vue.js 提供了良好的支持,如果你更熟悉 React 的话,也可以将默认的脚手架代码替换成 R ...

  10. jQuery File Upload的使用

    jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示等,以下就介绍一下该插件的简单使用 1.需要加载 ...