有没有办法删除spark dataFrame中只包含空值的列?(我使用的是scala和Spark 1.6.2)
此刻我是这样做的:
var validCols: List[String] = List()
for (col <- df_filtered.columns){
val count = df_filtered
.select(col)
.distinct
.count
println(col, count)
if (count >= 2){
validCols ++= List(col)
}
}
以构建包含至少两个不同值的列的列表,然后在select()中使用它。
谢谢你,谢谢你
5条答案
按热度按时间44u64gxh1#
我遇到了同样的问题,我在Java中想出了一个类似的解决方案。在我看来,目前没有其他方法可以做到这一点。
我删除了所有只包含一个不同值并且第一个值为空的列。这样我就可以确保不会删除所有值都相同但不为空的列。
fhity93d2#
下面是一个scala示例,它删除了只查询一次数据的空列(速度更快):
vxbzzdmp3#
@swdev的一个更惯用的版本回答:
0md85ypi4#
如果 Dataframe 的大小合理,我将其写为json,然后重新加载它。动态模式将忽略空列,这样您的 Dataframe 将更小。
scala代码片段:
ruyhziif5#
下面是用pySpark语法编写@timo-strotmann解决方案: