【问题标题】:Spark Scala - Handling empty DataFrameSpark Scala - 处理空数据帧
【发布时间】:2017-01-24 07:54:54
【问题描述】:

我有一个特定的要求,我需要检查空的 DataFrame。如果为空,则填充默认值。这是我尝试过的,但没有得到我想要的。

def checkNotEmpty(df: org.apache.spark.sql.DataFrame, col: String):org.apache.spark.sql.DataFrame = 
 {
 if (!df.rdd.isEmpty())  df
    else
  df.na.fill(0, Seq(col))
 }

val age = checkNotEmpty(w_feature_md.filter("age='22'").select("age_index"),"age_index")

我们的想法是如果 df 不为空,则获取它。如果为空,则填写默认值零。这似乎不起作用。以下是我得到的。

scala> age.show
+---------+
|age_index|
+---------+
+---------+

请帮忙..

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:
      def checkNotEmpty(df: org.apache.spark.sql.DataFrame, col: String):org.apache.spark.sql.DataFrame = 
         {
         if (!df.rdd.isEmpty())  df
            else
          df.na.fill(0, Seq(col))
         }
    

    在你的方法中:

    如果 df is not empty ,则控制转到 if 部分。

    df is empty 时转到else 部分。

    df.na (org.apache.spark.sql.DataFrameNaFunctions) :处理 DataFrame 中缺失数据的功能。
    由于您使用的是 df.na on an empty dataframe ,因此没有可替换的内容,因此结果始终为 empty

    查看ques 了解有关替换 df 中的空值的更多信息。

    【讨论】:

    • 谢谢@p2。有没有办法在 ) 为空时填写默认值
    • 再次感谢。它仍然没有像我预期的那样工作。 ` def checkNotEmpty(df: org.apache.spark.sql.DataFrame, col: String):org.apache.spark.sql.DataFrame = { if (df.rdd.isEmpty()) { println("here"); df.na.fill(0.0,Seq(col)) } else df } ` 我也尝试了上述方法。该值不是 NULL 而是空的,因此我认为 df.na.fill 在这种情况下不起作用..
    • 你可以试试这样的:df.na.replace("age", Map(35 -> 61,24 -> 12))).show()
    • 再次感谢.. 这也无济于事。我不确定我们在做什么,但按照你的建议做了。以下是我尝试过的事情。 ** scala> age.na.replace("age",Map(35->61,24 ->12)).show() +---------+ |age_index| +---------+ +---------+ scala> age.na.replace("age_index",Map(35->61,24 ->12)).show( ) +---------+ |年龄索引| +---------+ +---------+ scala> age.na.replace("",Map(35->61,24 ->12)).show() +---------+ |年龄索引| +---------+ +---------+ **
    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多