加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala:如何使用scala替换Dataframe中的值

发布时间:2020-12-16 09:28:06 所属栏目:安全 来源:网络整理
导读:例如,我想将列中等于0.2的所有数字替换为0.如何在Scala中执行此操作?谢谢 编辑: |year| make|model| comment |blank||2012|Tesla| S | No comment | | |1997| Ford| E350|Go get one now th...| | |2015|Chevy| Volt| null | null| 这是我的Dataframe我试
例如,我想将列中等于0.2的所有数字替换为0.如何在Scala中执行此操作?谢谢

编辑:

|year| make|model| comment            |blank|
|2012|Tesla| S   | No comment         |     | 
|1997| Ford| E350|Go get one now th...|     | 
|2015|Chevy| Volt| null               | null|

这是我的Dataframe我试图将make栏中的特斯拉改为S.

解决方法

注意:
正如Olivier Girardot所提到的,这个答案没有得到优化,而withColumn解决方案就是使用它(Azeroth2b答案)

由于已被接受,因此无法删除此答案

以下是我对此的看法:

val rdd = sc.parallelize(
      List( (2012,"Tesla","S"),(1997,"Ford","E350"),(2015,"Chevy","Volt"))
  )
  val sqlContext = new SQLContext(sc)

  // this is used to implicitly convert an RDD to a DataFrame.
  import sqlContext.implicits._

  val dataframe = rdd.toDF()

  dataframe.foreach(println)

 dataframe.map(row => {
    val row1 = row.getAs[String](1)
    val make = if (row1.toLowerCase == "tesla") "S" else row1
    Row(row(0),make,row(2))
  }).collect().foreach(println)

//[2012,S,S]
//[1997,Ford,E350]
//[2015,Chevy,Volt]

您实际上可以直接在DataFrame上使用map.

所以你基本上检查了第1列的String tesla.
如果是特斯拉,请使用值S for make else,然后使用第1列的当前值

然后使用索引(基于零)(我的示例中的Row(row(0),row(2)))构建一个包含行中所有数据的元组

可能有更好的方法.我不熟悉Spark之伞

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读