【问题标题】:SparkR-dropna not giving desired outputSparkR-dropna 未提供所需的输出
【发布时间】:2016-01-25 05:19:01
【问题描述】:

我在 R 中可用的空气质量数据集上应用了以下代码,其中有一些缺失值。我想省略具有 NAs 的行

库(SparkR) Sys.setenv('SPARKR_SUBMIT_ARGS'='"--packages" "com.databricks:spark-csv_2.10:1.2.0" "sparkr-shell"')

sc

sqlContext

路径

aq

head(dropna(aq,how="any"))

Ozone Solar_R Wind Temp Month Day 1 41 190 7.4 67 5 1 2 36 118 8.0 72 5 2 3 12 149 12.6 74 5 3 4 18 313 11.5 62 5 4 5 不适用 不适用 14.3 56 5 5 6 28 不适用 14.9 66 5 6

输出中仍然存在 NA。 我在这里遗漏了什么吗?

【问题讨论】:

    标签: na sparkr


    【解决方案1】:

    原生 R 中的缺失值用逻辑常量 <NA> 表示。 SparkR DataFrames 用 NULL 表示缺失值。如果使用 createDataFrame() 将本地 R data.frame 转换为分布式 SparkR DataFrame,SparkR 会自动将<NA> 转换为 NULL。但是,如果您通过使用 read.df() 从文件中读取数据来创建 SparkR DataFrame,则可能有“NA”字符串,但没有 R 逻辑常量 <NA> 缺失值表示。字符串 "NA" 不会自动转换为 NULL,因此 dropna() 不会将其视为缺失值。

    如果您的 csv 中有“NA”字符串,您可以过滤它们而不是使用 dropna():

    filtered_aq

    头部(filtered_aq)

    【讨论】:

    • 感谢您的解释。那么我们如何将 sparkR 数据框中的整个“NA”转换为 NULL 呢?
    【解决方案2】:

    我使用了一个不同的示例供您参考删除NA

    >data_local <- data.frame(Id=1:4, Age=c(40, 52, 25, NA))
    >data <- createDataFrame(sqlContext, data_local)
    
    >head(data)
     Id Age
    1  1  40
    2  2  52
    3  3  25
    4  4  NA
    
    >head(dropna(data,how="any"))
    Id Age
    1  1  40
    2  2  52
    3  3  25
    

    【讨论】:

    • 我认为问题在于读取 csv 文件。 read.df 不考虑 CSV 文件中的 NA
    猜你喜欢
    • 2016-09-19
    • 2022-01-24
    • 2021-06-05
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多