用scala spark将随机的RDD值替换为空

问题描述

我有一个包含将近15000条记录的csv文件。每行包含由制表符(\ t)划分的3种数据类型。我实际上想将第二列的值随机替换为null!也许我会保持8000不变,并将7000个值替换为null。

对scala(火花)有帮助吗?

外观如下:

enter image description here

解决方法

  1. 将数据读取为数据框
  2. 生成一个新列,例如rnd,它是一个从0到1的随机数
  3. rnd
import org.apache.spark.sql.functions.{lit,rand,when}
import spark.implicits._

spark.read.option("header","true").option("sep","\t").csv(<your_path>)
.withColumn("rnd",rand())
.withColumn("col2",when($"rnd" < 0.5,$"col2").otherwise(lit(null).cast(<col2_datatype_here>)))

,

@amelie,请注意我的回答中“ rnd”前面的$

您应该进行列比较,而不是值比较。

PS:由于我是stackoverflow新手,因此无法发表评论,因此需要一个单独的答案。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...