我在hadoop集群中有一个10gb的csv文件,有重复的列。我试着用sparkr分析它,所以我用 spark-csv
将其解析为 DataFrame
:
df <- read.df(
sqlContext,
FILE_PATH,
source = "com.databricks.spark.csv",
header = "true",
mode = "DROPMALFORMED"
)
但既然df有重复的 Email
列,如果要选择此列,则会出错:
select(df, 'Email')
15/11/19 15:41:58 ERROR RBackendHandler: select on 1422 failed
Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) :
org.apache.spark.sql.AnalysisException: Reference 'Email' is ambiguous, could be: Email#350, Email#361.;
at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolve(LogicalPlan.scala:278)
...
我想保留第一次出现的 Email
列并删除后者,我该怎么做呢?
3条答案
按热度按时间3pmvbmvn1#
您还可以使用
toDF
.对于pyspark来说,也是这样:从sparkDataframe中选择或删除重复的列
cnwbcb6i2#
最好的方法是在上游更改列名;)
但是,这似乎是不可能的,因此有两种选择:
如果列的大小写不同(“email”与“email”),可以启用区分大小写:
如果列名完全相同,则需要手动指定架构并跳过第一行以避免出现标题:
lsmepo6l3#
尝试重命名列。
您可以按位置而不是
select
打电话。或者,您可以直接删除列
其中x是不需要的列号。
更新:
如果上述操作不起作用,可以将header设置为false,然后使用第一行重命名列: