【发布时间】:2016-03-08 09:17:51
【问题描述】:
我正在解决一个问题,我需要加载大量 CSV 并使用 SparkR 对它们进行一些聚合。
- 我需要尽可能地推断架构(因此检测整数等)。
- 我需要假设我无法对架构进行硬编码(未知数量的 每个文件中的列或无法仅从列名推断架构)。
- 我无法从具有重复标头值的 CSV 文件推断架构 - 它根本不允许您这样做。
我像这样加载它们:
df1 <- read.df(sqlContext, file, "com.databricks.spark.csv", header = "true", delimiter = ",")
加载正常,但是当我尝试运行任何类型的作业(甚至是简单的count())时,它会失败:
java.lang.IllegalArgumentException: The header contains a duplicate entry: # etc
我尝试重命名架构中的标题:
new <- make.unique(c(names(df1)), sep = "_")
names(df1) <- new
schema(df1) # new column names present in schema
但是当我再次尝试 count() 时,我得到了与以前相同的重复错误,这表明它引用了旧的列名。
我觉得有一个非常简单的方法,如果有,请提前道歉。有什么建议吗?
【问题讨论】:
-
您可能会遇到与以前相同的重复错误,因为在您的 .count() 之前没有发生任何操作,因此在此之前数据甚至没有加载到您的数据框中,即使您更改了架构。您可以选择从 csv 中删除标题行,还是将其注释掉? (您可以将 csv 阅读器设置为忽略注释行)。然后在读取文件时使用 inferSchema="true"。
标签: sparkr