如何检查列数据Spark scala上的isEmpty

时间:2016-07-18 23:52:02

标签: sql arrays scala apache-spark apache-spark-sql

我的数据如下:

[null,223433,WrappedArray(),null,460036382,0,home,home,home]

如何在spark sql中查询col3是否为空?我试图爆炸但是当我这样做时,空数组行正在消失。有人可以建议我这样做的方法。

我试过了:

val homeSet = result.withColumn("subscriptionProvider", explode($"subscriptionProvider"))

其中subscriptionProvider(WrappedArray())是具有值数组的列,但某些数组可以为空。我需要使用null值获取subscriptionProvider,而subscriptionProvider数组具有“Comcast”

2 个答案:

答案 0 :(得分:7)

尝试:

import org.apache.spark.sql.functions._

val tmp = df.withColumn("subscriptionProvider", 
  when(size($"subscriptionProvider") !== 0, $"subscriptionProvider").otherwise(array(lit(null).cast("string"))))

tmp.withColumn("subscriptionProvider", explode($"subscriptionProvider"))

答案 1 :(得分:3)

LostInOverflow的答案有利于保持数据框架的思维模式。但是,这取决于列表的大小,data.US.iOS; 是否有效。如果您要拥有大型列表,那么退出并返回数据框可能是最好的:

size