【问题标题】:R :Read csv numeric with comma in decimal, package sparklyrR:用十进制逗号读取csv数字,包sparklyr
【发布时间】:2019-05-25 12:58:20
【问题描述】:

我需要使用“sparklyr”库读取“.csv”类型的文件,其中的数值以逗号显示。这个想法是能够直接使用“spark_read_csv()”进行阅读。

我正在使用:

library(sparklyr)
library(dplyr)

f<-data.frame(DNI=c("22-e","EE-4","55-W"), 
DD=c("33,2","33.2","14,55"),CC=c("2","44,4","44,9")) 

write.csv(f,"aff.csv")

sc <- spark_connect(master = "local", spark_home = "/home/tomas/spark-2.1.0-bin-hadoop2.7/", version = "2.1.0")

df <- spark_read_csv(sc, name = "data", path = "/home/tomas/Documentos/Clusterapp/aff.csv", header = TRUE, delimiter = ",")

tbl <- sdf_copy_to(sc = sc, x =df , overwrite = T)

问题,把数字看成因子

【问题讨论】:

  • 您可能希望包含文件中的一些示例数据。
  • 请将此数据添加到您的问题中,格式为可读代码。
  • 第一列为标识符,其余为数值,其中逗号标识带小数的数字。 df
  • 我正在寻找类似 R 的 csv2 () 函数,但是 sparklyr 的东西

标签: r apache-spark sparklyr


【解决方案1】:

要在 spark df 中操作字符串,您可以使用这里提到的 regexp_replace 函数:

https://spark.rstudio.com/guides/textmining/

对于你的问题,它会像这样工作:

tbl <- sdf_copy_to(sc = sc, x =df, overwrite = T)

tbl0<-tbl%>%
    mutate(DD=regexp_replace(DD,",","."),CC=regexp_replace(CC,",","."))%>%
    mutate_at(vars(c("DD","CC")),as.numeric)

检查你的结果:

> glimpse(tbl0)
Observations: ??
Variables: 3
$ DNI <chr> "22-e", "EE-4", "55-W"
$ DD  <dbl> 33.20, 33.20, 14.55
$ CC  <dbl> 2.0, 44.4, 44.9

【讨论】:

  • 明白了!!,你所做的就是从第二个“df”加载它,它使用 spark_read_csv() 出色的贡献!
【解决方案2】:

如果你不想用 '.' 代替它也许你可以试试这个。

spark_read_csv

检查文档。使用 escape 参数指定您要忽略的字符。

在这种情况下尝试使用:

df <- spark_read_csv(sc, name = "data", path = "/home/tomas/Documentos/Clusterapp/aff.csv", header = TRUE, delimiter = ",", escape = "\,").

【讨论】:

    【解决方案3】:

    您可以将数字中的“,”替换为“。”并将它们转换为数字。比如

    df$DD<-as.numeric(gsub(pattern = ",",replacement = ".",x = df$DD))
    

    这有帮助吗?

    【讨论】:

    • 这是一个很好的策略,但目标是能够读取数据而无需在R中加载数据,而是直接使用Sparklyr进行操作。在 R 中是命令 read.csv2(),它允许读取带逗号的十进制数字数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2018-09-01
    • 2017-04-09
    相关资源
    最近更新 更多