[英]Remove empty lists in Scala from ArrayType column in Spark Dataframe
我在數據框中有一列 ArrayType 類型。 現在,在此列中,我有空列表。 例如:
+-------+
|xyz|
+-------+
|[a,,] |
|[] |
+-------+
我想從列表中刪除空值並將列輸出為:
+-------+
|xyz|
+-------+
|[a] |
+-------+
加入本專欄時如何實現這一目標? 謝謝你。
您可以使用map
和filter
來實現這一點。
import spark.implicits._
import org.apache.spark.sql.Row
import scala.collection.mutable.WrappedArray
import org.apache.spark.sql.functions.col
val data = Seq(Array("a",null,""), Array(""))
val rdd = spark.sparkContext.parallelize(data)
val df = rdd.toDF("xyz")
df.show()
+------+
| xyz|
+------+
|[a,, ]|
| []|
+------+
// Use map to filter out all the null or empty strings, then remove rows that are empty arrays
val mappedDF = df
.map{case Row(x:WrappedArray[String]) => x
.filter(_ != null)
.filter(_.nonEmpty)
}
.toDF("xyz")
.filter(size(col("xyz")) > 0)
mappedDF.show()
+---+
|xyz|
+---+
|[a]|
+---+
嘗試:
import org.apache.spark.sql.functions.{size, col, expr}
df.withColumn("xyz", expr("filter(xyz, x -> x is not null)"))
.filter(size(col("xyz")) > 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.