scala - Spark 仅获取具有一个或多个空值的列

标签 scala apache-spark apache-spark-sql spark-dataframe apache-spark-mllib

我想从一个数据框中获取其中至少包含一个空值的列的名称。

考虑下面的数据框:

val dataset = sparkSession.createDataFrame(Seq(
  (7, null, 18, 1.0),
  (8, "CA", null, 0.0),
  (9, "NZ", 15, 0.0)
)).toDF("id", "country", "hour", "clicked")

我想获取列名称“国家/地区”和“小时”。

id  country hour    clicked
7   null    18      1
8   "CA"    null    0
9   "NZ"    15      0

最佳答案

这是一个解决方案,但有点尴尬,我希望有更简单的方法:

val cols = dataset.columns

val columnsToSelect = dataset
  // count null values (by summing up 1s if its null)
  .select(cols.map(c => (sum(when(col(c).isNull,1))>0).alias(c)):_*)
  .head() // collect result of aggregation
  .getValuesMap[Boolean](cols) // now get columns which are "true"
  .filter{case (c,hasNulls) => hasNulls}
  .keys.toSeq // and get the name of those columns


dataset
  .select(columnsToSelect.head,columnsToSelect.tail:_*)
  .show()
+-------+----+
|country|hour|
+-------+----+
|   null|  18|
|     CA|null|
|     NZ|  15|
+-------+----+

关于scala - Spark 仅获取具有一个或多个空值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48261746/

相关文章:

apache-spark - 如何从DataFrame将数据准备为LibSVM格式?

java - 为什么这些函数删除后类型相同?

arrays - Scala 将 IndexedSeq[AnyVal] 转换为 Array[Int]

java - 使用 Scala Trait 扩展 Java 类

scala - Spark sql 在进行数据类型转换时将坏记录转换为 Null

apache-spark - 有关 Spark rdd.saveAsObjectFile 文件格式的文档

apache-spark - Sparkconf 和 Sparkcontext 有什么区别?

python - Pyspark错误+方法__getnewargs__([])不存在

apache-spark - 如何优化 Apache Spark 应用程序中的 shuffle 溢出

algorithm - 在 Apache Spark 中过滤空间数据