用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新手,因此无法发表评论,因此需要一个单独的答案。