代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

新列接收空值

  •  -1
  • ScalaBoy  · 技术社区  · 6 年前

    我有以下数据框 df

    +-----------+-----------+-----------+
    |CommunityId|nodes_count|edges_count|
    +-----------+-----------+-----------+
    |         26|          3|         11|
    |        964|         16|         18|
    |       1806|          9|         31|
    |       2040|         13|         12|
    |       2214|          8|          8|
    |       2927|          7|          7|
    

    然后我添加列 Rate 如下:

    df
      .withColumn("Rate",when(col("nodes_count") =!= 0, (lit("edges_count")/lit("nodes_count")).as[Double]).otherwise(0.0))
    

    这就是我得到的:

    +-----------+-----------+-----------+-----------------------+
    |CommunityId|nodes_count|edges_count|                   Rate|
    +-----------+-----------+-----------+-----------------------+
    |         26|          3|         11|                   null|
    |        964|         16|         18|                   null|
    |       1806|          9|         31|                   null|
    |       2040|         13|         12|                   null|
    |       2214|          8|          8|                   null|
    |       2927|          7|          7|                   null|
    

    不知为什么 费率 总是等于 null 是的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   user9989324    6 年前

    因为你用 lit .你应该用 col 相反:

    df
      .withColumn(
        "Rate" ,when(col("nodes_count") =!= 0,
        (col("edges_count") / col("nodes_count")).as[Double]).otherwise(0.0))
    

    尽管两者都是 when 作为 Double 在这里没用,简单的划分就足够了:

    df.withColumn("Rate", col("edges_count") / col("nodes_count"))