Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spark(RDD,CSV)创建DataFrame方式

Spark(RDD,CSV)创建DataFrame方式

作者头像
Tim在路上
发布于 2020-08-04 13:46:04
发布于 2020-08-04 13:46:04
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

spark将RDD转换为DataFrame

  1. 方法一(不推荐)

spark将csv转换为DataFrame,可以先文件读取为RDD,然后再进行map操作,对每一行进行分割。 再将schema和rdd分割后的Rows回填,sparkSession创建的dataFrame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 val spark = SparkSession
      .builder()
      .appName("sparkdf")
      .master("local[1]")
      .getOrCreate()

       //设置spark的上下文sparkContext
      val sc = spark.sparkContext
      val fileRDD = sc.textFile("/home/hadoop/Downloads/filesmall2.csv")
      //val rdd = fileRDD.filter(line => line.split("\t").length != 30)
      val df = spark.createDataFrame(fileRDD.map(line=>HttpSchema.parseLog(line)),HttpSchema.struct)
      df.show(3)

这里的RDD是通过读取文件创建的所以也可以看做是将RDD转换为DataFrame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object HttpSchema {

  def parseLog(x:String): Row = {

    var fields = x.split("\t")

    val _id = fields(0)
    val srcIp = fields(1)
    val srcPort = fields(2)
    //这种方法比较麻烦的地方是row里面的字段名要和struct中的字段对应上
    RowFactory.create(_id,srcIp,srcPort)
  }

  //设置schema描述
  val struct = StructType(
    Array( StructField("_id",StringType),
      StructField("srcIp",StringType),
      StructField("srcPort",StringType),
    )
  )
}

这也是这种方法不推荐使用的地方,因为返回的Row中的字段名要与schema中的字段名要一致,当字段多于22个这个需要集成一个

2.方法二 //使用隐式转换的方式来进行转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val spark = SparkSession
      .builder()
      .appName("sparkdf")
      .master("local[1]")
      .getOrCreate()
      
      //使用隐式转换必须导入这个才可以使用只有import spark.implicits._之后,RDD才有toDF、toDS功能


      import spark.implicits._
      
       //设置spark的上下文sparkContext
      val sc = spark.sparkContext

      val fileRDD = sc.textFile("/home/hadoop/Downloads/filesmall2.csv")

      case class HttpClass(id:String,srcIp:String,srcPort:Int)

      val df = fileRDD.map(_.split("\t")).map(line=>HttpClass(line(0),line(1),line(2).toInt)).toDF()

当然也可以不创建类对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rdd.map{x=>val par=x.split(",");(par(0),par(1).toInt)}.toDF("name","age")

dataFrame转换为RDD只需要将collect就好,df.collect RDD[row]类型,就可以按row取出

spark读取csv转化为DataFrame

  1. 方法一
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 val conf = new SparkConf().setAppName("word count").setMaster("local[1]")

    val sc = new SparkContext(conf)
    println("spark version: " + sc.version)

    val spark = new SQLContext(sc)

    import spark.implicits._

    val df = spark.read.format("com.databricks.spark.csv")
      .option("header", "false")
      .option("inferSchema", "false") //是否自动推到内容的类型
      .option("delimiter",",")  //分隔符,默认为 ,
      .load("/home/hadoop/Downloads/Salary_Data.csv")
    df.show()
    
    
    //进行写数据
    data.repartition(1).write.format("com.databricks.spark.csv")
      .option("header", "false")//在csv第一行有属性"true",没有就是"false"
      .option("delimiter",",")//默认以","分割
      .save(outpath)
     sparkContext.stop()

sparkContext.sql()操作完成后直接返回的是DataFrame 当然可以间接采用将csv直接转换为RDD然后再将RDD转换为DataFrame

2.方法二

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 读取数据并分割每个样本点的属性值 形成一个Array[String]类型的RDD 
val rdd = sc.textFile("file:///home/xuqm/ML_Data/input/synthetic_control.data").map(_.split("\\s+")) 
// 将rdd转换成LabeledPoint类型的RDD 
val LabeledPointRdd = rdd.map(x=>LabeledPoint(0,Vectors.dense(x.map(_.toDouble))))
// 转成DataFrame并只取"features"列 
val data = spark.createDataFrame(LabeledPointRdd).select("features")
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在PhpStorm中使用PSR2编码规范phpcbf脚本自动修正代码格式
团队开发约定使用PSR-2的编码风格规范,但是并不是所有人都严格按照PSR-2来提交代码的
沈唁
2018/10/10
3.2K0
在PhpStorm中使用PSR2编码规范phpcbf脚本自动修正代码格式
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就是提高代码质量,比如通过代码审查,从而降低错误风险,但是,代码审查难度大,代码缺陷、漏洞不易发现,且审查工作随着代码量增加而增加,审查效率低。
用户1220090
2025/03/31
2740
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
在PhpStorm中使用PSR2编码规范phpcbf脚本自动修正代码格式
团队开发约定使用 PSR-2 的编码风格规范,但是并不是所有人都严格按照 PSR-2 来提交代码的
OwenZhang
2021/12/08
9950
在PhpStorm中使用PSR2编码规范phpcbf脚本自动修正代码格式
阿里发布的规约插件使用指南
10月14日,阿里巴巴在杭州云栖大会上,正式发布了由阿里巴巴 P3C 项目组,经过 247 天的持续研发,正式发布众所期待的 《阿里巴巴 Java 开发规约》的扫描插件!
蜻蜓队长
2018/08/03
1.2K0
阿里发布的规约插件使用指南
Maven插件方式执行CheckStyle并自定义风格文件
代码风格包含了变量的命名,缩进,注释等内容,在团队开发中,多人协同开发要避免各种风格混合带来的混乱,统一的代码风格是必须的。在开发过程中,我们可以使用一些工具来改进这一状况,比如 checkStyle 工具。
张云飞Vir
2023/01/04
2.3K0
推荐 33 个 IDEA 最牛配置,写代码太爽了!
blog.csdn.net/fly910905/article/details/77868300
Java技术栈
2019/09/24
3.4K0
推荐 33 个 IDEA 最牛配置,写代码太爽了!
有了这 5 个 IDEA 插件,代码质量还不杠杠的!拿捏!
随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就是提高代码质量,比如通过代码审查,从而降低错误风险,但是,代码审查难度大,代码缺陷、漏洞不易发现,且审查工作随着代码量增加而增加,审查效率低。
Java团长
2022/12/20
5.5K0
有了这 5 个 IDEA 插件,代码质量还不杠杠的!拿捏!
『手撕Vue-CLI』编码规范检查
这篇为什么是编码规范检查呢?因为这是一个很重要的环节,一个好的编码规范可以让代码更加清晰易读,在官方的 VUE-CLI 也是有着很好的编码规范的,所以我也要加入这个环节。
程序员NEO
2024/04/17
2141
『手撕Vue-CLI』编码规范检查
IDEA 代码规范插件
这时候就必须得有一些代码规范,来统一团队代码;IEDA中,有一个插件(Alibaba Java Coding Guidelines)帮我们很好的解决了这一问题;
Dawnzhang
2018/10/18
1.7K0
IDEA 代码规范插件
MEP | Code Review 建议
一、目标和原则二、开发者三、评审者四、实用性建议1. 对事不对人2. 每个 Review 至少给一条正面评价3. 使用统一的代码风格规范4. 全员参加 Code Review,并设定各部分负责人5. 每次 Code Review 的量不宜太多6. 在写新代码之前,先 Review 掉需要评审的代码7. 如果你有更好的方案,尽管提出来8. 不要在 Review 中讨论需求,Review 就是 Review9. 不要试图一次就能改善所有的问题10. 交叉 Review五、小项目团队内部采用轮换 Review 的方式六、推荐几款代码检查工具静态代码风格检测Bug 扫描参考
双鬼带单
2021/09/09
4130
MEP | Code Review 建议
为了写好代码,你坚持了哪些好习惯?
代码的质量会影响到产品的性能和好坏,代码水平也是程序员业务水平的直观体现,那么我们如何才能写好代码呢?接下来和大家分享一些写好代码的习惯。
再见孙悟空_
2023/02/10
2800
为了写好代码,你坚持了哪些好习惯?
【云+社区年度征文】浅谈java企业应用开发代码规范
很多时候我们项目迭代到后期,项目会变得很混乱,往往只有少数人能知道某段代码是干嘛的和该如何去改,或者是干脆谁都不知道,只能靠通过注释去猜测这段代码可能的作用。原因有可能是因为团队内部的人事变动,导致原先写这段代码的人不再管理这段代码了,并且代码写的实在是屎没人捋的清。往往我们称这类代码为“祖传代码”,就像祖宗传下来的代码一样,没人懂没人敢动。祖传代码一多,这个项目就变成了屎一样,开发人员再这基础上迭代就如同屎海翻腾,恶心别人也恶心自己。这是一个很可怕的恶心循环,我们如何去避免这种事情发生呢?先让我们分析下这类代码的通病
六个核弹
2020/12/17
1.9K1
【云+社区年度征文】浅谈java企业应用开发代码规范
巧用 gitHooks 提交前校验代码
在每一个使用 git 进行版本管理的仓库,都有一个目录 .git/hooks,包含 commit 各个阶段 Hooks 的脚本。这些 Hooks 在 git 操作 commit、push、merge 等得时候,可以做前置或者后置的操作,例如 pre-commit 在 git commit 前可以做代码校验,校验代码的时候使用的ESLint,格式化使用的是 prettier。Git 支持的常用钩子见下表,更多请查看官网Hooks:
刘小夕
2021/12/09
4.8K0
巧用 gitHooks 提交前校验代码
要想代码写的好,这几款IDEA插件你离不了!
在写代码的时候,有几个 IDEA 插件对于我规范代码以及更高效地完成编码工作有奇效。
乔戈里
2020/11/13
1.7K0
要想代码写的好,这几款IDEA插件你离不了!
Findbugs配合idea使用代码检查(功能同sonarqube类似)
sonarqube可参考这里:https://blog.csdn.net/weixin_44689968/article/details/115506998
botkenni
2022/12/07
4.2K0
Findbugs配合idea使用代码检查(功能同sonarqube类似)
代码质量堪忧?用 detekt 呀,拿捏得死死的~
930改革之后,我们公司内部的技术基建的发展有了显著的成效,对于代码质量的追求也成为工程师们日常生活中最重要的几件事之一。对于我们 Kotlin 开发者而言,代码的静态扫描其实意义非凡,除了让公司项目代码风格保持统一以外,也能够纠正我们日常开发当中的不当写法,对于提升我们的编码意识有很好的效果。所以,我特别邀请我们组内的小伙伴撰写了这篇关于 detekt 的上手指南,希望对提升大家的代码质量有帮助。
bennyhuo
2021/04/09
3.8K0
代码质量堪忧?用 detekt 呀,拿捏得死死的~
ESLint 可共享配置发布,团队自定义 ESLint 规则新鲜出炉
ESLint于2013年6月份推出,至今4个年头,最新版本v4.8.0。它是目前主流的用于Javascript和JSX代码规范检查的利器,很多大公司比如Airbnb和Google均有一套自己的Java
腾讯IVWEB团队
2017/10/12
1.7K0
ESLint 可共享配置发布,团队自定义 ESLint 规则新鲜出炉
Intellij IDEA就这样配置,快到飞起!
blog.csdn.net/fly910905/article/details/77868300
用户2242639
2021/07/23
2.1K0
Intellij IDEA就这样配置,快到飞起!
玩转idea Intelij(常用快捷键及一些配置)
我一直自诩干活效率高,但是最近见识了一些大佬,在编码过程中,基本不使用鼠标,效率高的飞起.
呼延十
2019/07/01
1.8K0
玩转idea Intelij(常用快捷键及一些配置)
别再写狗屎代码了,推荐这 5 款 IDEA 插件,让你的代码质量直接起飞!
随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就是提高代码质量,比如通过代码审查,从而降低错误风险,但是,代码审查难度大,代码缺陷、漏洞不易发现,且审查工作随着代码量增加而增加,审查效率低。
Java技术栈
2023/02/27
2.3K0
别再写狗屎代码了,推荐这 5 款 IDEA 插件,让你的代码质量直接起飞!
推荐阅读
相关推荐
在PhpStorm中使用PSR2编码规范phpcbf脚本自动修正代码格式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验