null値の場合に列名を取得するアイデアがありません
例えば、
case class A(name: String, id: String, email: String, company: String)
val e1 = A("n1", null, "[email protected]", null)
val e2 = A("n2", null, "[email protected]", null)
val e3 = A("n3", null, "[email protected]", null)
val e4 = A("n4", null, "[email protected]", null)
val e5 = A("n5", null, "[email protected]", null)
val e6 = A("n6", null, "[email protected]", null)
val e7 = A("n7", null, "[email protected]", null)
val e8 = A("n8", null, "[email protected]", null)
val As = Seq(e1, e2, e3, e4, e5, e6, e7, e8)
val df = sc.parallelize(As).toDF
このコードは、データフレームを次のようにします。
+----+----+---------+-------+
|name| id| email|company|
+----+----+---------+-------+
| n1|null|[email protected]| null|
| n2|null|[email protected]| null|
| n3|null|[email protected]| null|
| n4|null|[email protected]| null|
| n5|null|[email protected]| null|
| n6|null|[email protected]| null|
| n7|null|[email protected]| null|
| n8|null|[email protected]| null|
+----+----+---------+-------+
列名を取得したいのですが、すべての行がnullです:id、company
出力の種類は関係ありません。配列、文字列、RDDは何でも
すべての列で単純なカウントを実行し、カウントを返す列のインデックスを使用して、0
サブセットを作成できますdf.columns
。
import org.apache.spark.sql.functions.{count,col}
// Get column indices
val col_inds = df.select(df.columns.map(c => count(col(c)).alias(c)): _*)
.collect()(0)
.toSeq.zipWithIndex
.filter(_._1 == 0).map(_._2)
// Subset column names using the indices
col_inds.map(i => df.columns.apply(i))
//Seq[String] = ArrayBuffer(id, company)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加