gpt4 book ai didi

scala - Spark - Scala - 根据条件从数据框中删除列

转载 作者:行者123 更新时间:2023-12-04 14:25:55 28 4
gpt4 key购买 nike

我们有一个特定的需求,其中我将不得不从 dataframedrop 列,该列中只有一个唯一值。以下是我们正在做的事情

val rawdata = spark.read.format("csv").option("header","true").option("inferSchema","true").load(filename)

随后,为了在所有列中查找唯一值,我们使用 spark 支持的 HyperLog++ 算法

val cd_cols  = rawdata.select(rawdata.columns.map(column => approxCountDistinct(col(column)).alias(column)): _*)

输出是

scala> cd_cols.show
+----+----------+---------+---+---------+--------------+---------+----------+----------------+---------+--------------+-------------+
| ID|First Name|Last Name|Age|Attrition|BusinessTravel|DailyRate|Department|DistanceFromHome|Education|EducationField|EmployeeCount|
+----+----------+---------+---+---------+--------------+---------+----------+----------------+---------+--------------+-------------+
|1491| 172| 154| 43| 2| 3| 913| 3| 30| 1| 6| 1|
+----+----------+---------+---+---------+--------------+---------+----------+----------------+---------+--------------+-------------+

请注意,我有两列的唯一值是 1。我想创建另一个 dataframe,它包含除这两列(EducationEmployeeCount)之外的所有列

我试过使用for循环,但不是很开心,也试过了

cd_cols.columns.filter(colName => cd_cols.filter(colName) <= 1)

那也行不通。

请问有没有更聪明的方法来做到这一点。

谢谢

巴拉

最佳答案

你试试下面的命令:

df.selectExpr(df.first().getValuesMap[Int](df.columns).filter(_._2 != 1).keys.toSeq: _*).show

在这里,我们首先获取 dataframe 的第一行,并使用带有列名的 getValueMap 将其转换为 map ,并仅过滤值不为 1 的列.

关于scala - Spark - Scala - 根据条件从数据框中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44386273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com