用scala spark将随机rdd值替换为null

scyqe7ek  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(496)

我有一个csv文件包含了将近15000条记录。每行包含3种类型的数据,由一个制表符(\t)分隔。实际上,我想将第二列值随机替换为null!也许我会保持8000的原样,并将7000个值替换为null。
有什么需要帮忙的吗?
它看起来是这样的:

mccptt67

mccptt671#

@艾米莉,注意 $ 在“rnd”前面,在我的回答中。
你应该做一个列比较,而不是值比较。 PS :无法发表评论,因为我是一个新手,因此有一个单独的答案。

ee7vknir

ee7vknir2#

将数据作为Dataframe读取
生成新列 rnd 是一个从0到1的随机数
make col2=col2时 rnd <0.5(如果要使50%的值为空)否则为空

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>)))

相关问题