我正在处理一个问题,我需要加载大量的CSV并使用SparkR对它们进行聚合。在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”。 – xyzzy