我正在解决一个问题,我需要加载大量的CSV并使用SparkR对它们进行一些聚合。
我像这样加载它们:
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()时,我得到了与之前相同的重复错误,这表明它引用了旧的列名称。
我觉得有一种非常简单的方法,如果有的话,提前道歉。有什么建议吗?
答案 0 :(得分:0)
spark csv包目前似乎没有办法按索引跳过行,如果你不使用header =“true”,你的带有dupes的标题将成为第一行,这将搞乱您的架构推断。如果您碰巧知道带有dupes的标题的开头是什么字符,并且知道没有其他行将以此开头,您可以将其放入注释字符设置中,该行将被跳过。例如。
df <- read.df(sqlContext, "cars.csv", "com.databricks.spark.csv",header="false", comment="y",delimiter=",",nullValue="NA",mode="DROPMALFORMED",inferSchema="true")