【问题标题】:How to handle nulls in SparkSQL Dataframes如何处理 SparkSQL 数据帧中的空值
【发布时间】:2017-06-02 16:44:22
【问题描述】:

这是我正在关注的代码:

val ebayds = sc.textFile("/user/spark/xbox.csv")

case class Auction(auctionid: String, bid: Float, bidtime: Float, bidder: String, bidderrate: Int, openbid: Float, price: Float)

val ebay = ebayds.map(a=>a.split(",")).map(p=>Auction(p(0),p(1).toFloat,p(2).toFloat,p(3),p(4).toInt,p(5).toFloat,p(6).toFloat)).toDF()

ebay.select("auctionid").distinct.count

我得到的错误是:

 For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

【问题讨论】:

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


【解决方案1】:

使用DataFrameNaFunctions

DataFrame fill(double value) 返回一个新的 DataFrame 替换 具有值的数值列中的空值。

数据帧填充(双 value, scala.collection.Seq cols) (Scala-specific) 返回一个 用于替换指定数值列中的空值的新 DataFrame。

示例用法:

df.na.fill(0.0,Seq("your columnname"))

对于该列,空值将替换为 0.0 或任何默认值。

replace 对于用默认值替换空字符串也很有用

replace public DataFrame replace(String col, java.util.Map 替换)用相应的值替换替换映射中匹配键的值。钥匙 和替换映射的值必须具有相同的类型,并且只能是 双打或弦乐。如果 col 是“*”,则替换应用于 所有字符串列或数字列。

导入 com.google.common.collect.ImmutableMap;

// 将“高度”列中所有出现的 1.0 替换为 2.0。
df.replace("高度", ImmutableMap.of(1.0, 2.0));

// 将列中所有出现的“UNKNOWN”替换为“unnamed” “姓名”。 df.replace("name", ImmutableMap.of("UNKNOWN", "unnamed"));

// 将所有出现的“UNKNOWN”替换为“unnamed” 字符串列。 df.replace("*", ImmutableMap.of("UNKNOWN", “未命名”));参数: col - 要应用值的列的名称 替换替换 - 值替换映射,如上所述 退货:(无证)因为: 1.3.1

例如:

df.na.replace("your column", Map(""-> 0.0)))

【讨论】:

    【解决方案2】:

    这对我有用。它返回了一个数据框。这里AB 是列,1.0"unknown" 是要替换的值。

    df.na.fill(Map("A" -> "unknown","B" -> 1.0))
    

    【讨论】:

      猜你喜欢
      • 2015-11-28
      • 1970-01-01
      • 2021-07-19
      • 2017-01-24
      • 2015-02-14
      • 2022-08-03
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多