簡體   English   中英

從 Spark Dataframe 的 ArrayType 列中刪除 Scala 中的空列表

[英]Remove empty lists in Scala from ArrayType column in Spark Dataframe

我在數據框中有一列 ArrayType 類型。 現在,在此列中,我有空列表。 例如:

+-------+
|xyz|
+-------+
|[a,,]  |
|[]     |
+-------+

我想從列表中刪除空值並將列輸出為:

+-------+
|xyz|
+-------+
|[a]    |     
+-------+

加入本專欄時如何實現這一目標? 謝謝你。

您可以使用mapfilter來實現這一點。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM