【发布时间】:2017-02-24 17:39:39
【问题描述】:
我有一个包含一些缺失值的 Spark Dataframe。我想通过用该列的平均值替换缺失值来执行简单的插补。我对 Spark 很陌生,所以我一直在努力实现这个逻辑。到目前为止,这是我设法做到的:
a) 要为单个列(假设 Col A)执行此操作,这行代码似乎可以工作:
df.withColumn("new_Col", when($"ColA".isNull, df.select(mean("ColA"))
.first()(0).asInstanceOf[Double])
.otherwise($"ColA"))
b) 但是,我无法弄清楚如何对数据框中的所有列执行此操作。我正在尝试 Map 功能,但我相信它会循环遍历数据框的每一行
c) 在 SO - here 上有一个类似的问题。虽然我喜欢这个解决方案(使用聚合表和合并),但我很想知道是否有办法通过循环遍历每一列来做到这一点(我来自 R,所以使用更高阶的函数循环遍历每一列,比如lapply 对我来说似乎更自然)。
谢谢!
【问题讨论】:
-
顺便说一句,在
scala中使用asInstanceOf[T]被认为是一种不好的做法。
标签: scala apache-spark dataframe apache-spark-sql imputation