【问题标题】:How to check isEmpty on Column Data Spark scala如何检查列数据 Spark scala 上的 isEmpty
【发布时间】:2016-07-18 23:52:01
【问题描述】:

我的数据看起来像:

[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”

【问题讨论】:

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


    【解决方案1】:

    试试:

    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"))
    

    【讨论】:

    • 谢谢。有用。但是创建 2 列 df.withColumn 是否有效
    • 但是当我尝试使用: tmp.filter($"subscriptionProvider" === "null").collect.foreach(println) 它不起作用
    • tmp.filter($"requestId" === "223433").select($"subscriptionProvider").collect.foreach(println) 给出 [null] 但是当我查询 tmp.filter( $"subscriptionProvider" === "null").collect.foreach(println) 它什么也没显示
    【解决方案2】:

    LostInOverflow 的回答有助于保持数据框的心态。但是,size 是否有效取决于列表的大小。如果您要拥有大型列表,那么最好退出并返回数据框:

    val dfSchema = df.schema
    val filtered = df.rdd.filter(!_.getList[String](2).isEmpty)
    sqlContext.createDataFrame(filtered, dfSchema)
    

    【讨论】:

    • 我试过你的想法,但是: val records = sqlContext.read.schema(schema).json(filePath) val dfSchema = records.schema val filtered = records.rdd.filter(!_.getList [String](0).isEmpty) val newRecords = sqlContext.createDataFrame(filtered, dfSchema) newRecords.filter($"requestId" === "223433").collect.foreach(println) 它给了我错误
    • java.lang.ClassCastException: java.lang.String 不能转换为 scala.collection.Seq
    • @Swetha 您必须将 0 替换为列的序号位置。我已根据您的要求编辑了答案
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2014-01-17
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多