【发布时间】:2021-12-20 00:34:30
【问题描述】:
对于其中一个数据清理步骤,我想深入了解唯一值是如何以占总行数的百分比存在的,以便我可以应用阈值并决定是否应该完全删除此列/功能.为此,我提出了以下功能:
def uniqueValuesAsPercentage(data: DataFrame) = {
val (rowCount, columnCount) = shape(data)
data.selectExpr(data.head().getValuesMap[Long](data.columns).map(elem => {
val (columnName, uniqueCount) = elem
val percentage = uniqueCount / rowCount * 100
(columnName, uniqueCount, percentage)
}))
}
但它失败并出现以下错误:
<console>:90: error: type mismatch;
found : scala.collection.immutable.Iterable[(String, Long, Long)]
required: String
data.selectExpr(data.head().getValuesMap[Long](data.columns).map(elem => {
不幸的是,因为这是在 Apache Zeppelin 笔记本中,所以我也缺少 IDE 的功能。我有 IntelliJ untilate,但大数据工具支持似乎不适用于我的 IDE 版本。很烦人!
关于这里的问题有什么想法吗?我想我弄乱了 selectExpr(....) 中的 DataFrame。可以看出,我正在返回一个包含我计算的信息的元组。
【问题讨论】:
-
selectExpr接收代表 sql 表达式 (cast(col_x as string)) 的字符串,但您为其提供了一个可迭代的元组。请参阅下面我建议的解决方案。
标签: scala apache-spark apache-spark-sql distinct