我们有一个具体的需求,其中我必须从dataframe
的drop
列开始,该列在该列中只有一个唯一值。以下是我们在做什么Spark - Scala - 根据条件从数据框中删除列
val rawdata = spark.read.format("csv").option("header","true").option("inferSchema","true").load(filename)
随后找到火花支持我们使用的是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
具备除了这两列的所有列(Education
和EmployeeCount
)
我试图用一个for循环,但不是很高兴,也试过
cd_cols.columns.filter(colName => cd_cols.filter(colName) <= 1)
,它也无法正常工作。
请问有没有更智能的方法来做到这一点。
感谢
巴拉
如果你不想要这些列,那么只需选择其余的列。 –
@RameshMaharjan,我不会知道它。这一切都取决于前面的语句返回的唯一值。我不能'硬编码'这些列。 –
所以这意味着你想删除那些有1值的列? –