我在 Apache Spark SQL 中有一個 DataFrame,我想洗掉所有非 None 值都相同的所有列。
所以在一個虛擬的例子中
df
| A | B | C |
1 2 3
NaN 2 4
1 2 NaN
1 2 5
我只想保留 C 列
df_filter
| C |
3
4
NaN
5
在 Python 中,我會按照以下方式進行
nunique = df.fillna(df.median()).nunique()
cols_to_drop = nunique[nunique == 1].index
df = df.drop(cols_to_drop, axis=1)
但是我將如何在 Apache Spark SQL DataFrame (Scala) 中做到這一點?
uj5u.com熱心網友回復:
一種方法是countDistinct在所有列上使用。該函式本身會忽略null值:
val uniqueCounts = df
.select(df.columns.map(c => countDistinct(col(c)) as c): _*)
.head
val nonUniqueCols = df.columns
.filter(c => uniqueCounts.getAs[Long](c) > 1)
val df_filter = df.select(nonUniqueCols.map(col) : _*)
df_filter.show
請注意,如果您有NaN(不是數字)值而不是null值,它們不會被countDistinct. 如果你想他們是,取代countDistinct(col(c))通過countDistinct(when(col(c) !== Double.NaN,col(c)))變換NaN值代入null數值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/338798.html
上一篇:如何停止單個頁面的重定向規范
