使用SparkR中的重复列

时间:2016-03-07 12:54:50

标签: sparkr

我正在解决一个问题,我需要加载大量的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()时,我得到了与之前相同的重复错误,这表明它引用了旧的列名称。

我觉得有一种非常简单的方法,如果有的话,提前道歉。有什么建议吗?

1 个答案:

答案 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"‌​)