복붙노트

[HADOOP] Spark Dataframe의 중복 열

HADOOP

Spark Dataframe의 중복 열

중복 열이있는 hadoop 클러스터에 10GB csv 파일이 있습니다. 나는 Spark-Csv 패키지를 사용하여 DataFrame으로 분석한다.

  df <- read.df(
    sqlContext,
    FILE_PATH,
    source = "com.databricks.spark.csv",
    header = "true",
    mode = "DROPMALFORMED"
  )

그러나 df에 중복 전자 메일 열이 있으므로이 열을 선택하려면 오류가 발생합니다.

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)
...

전자 메일 열의 첫 번째 항목을 유지하고 후자를 삭제하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.가장 좋은 방법은 업스트림 열 이름을 변경하는 것입니다.

    가장 좋은 방법은 업스트림 열 이름을 변경하는 것입니다.

    그러나 그것은 가능하지 않으므로 몇 가지 옵션이 있습니다.

  2. ==============================

    2.열의 이름을 변경하십시오.

    열의 이름을 변경하십시오.

    선택 호출 대신 위치별로 선택할 수 있습니다.

    colnames(df)[column number of interest] <- 'deleteme'
    

    또는 열을 직접 삭제할 수도 있습니다.

     newdf <- df[,-x]
    

    여기서 x는 원하지 않는 열 번호입니다.

    최신 정보:

    위 코드가 작동하지 않으면 헤더를 false로 설정 한 다음 첫 번째 행을 사용하여 열의 이름을 바꿀 수 있습니다.

      df <- read.df(
        sqlContext,
        FILE_PATH,
        source = "com.databricks.spark.csv",
        header = "FALSE",
        mode = "DROPMALFORMED"
      )
    
    #get first row to use as column names
    mycolnames <- df[1,]
    
    #edit the dup column *in situ*
    mycolnames[x] <- 'IamNotADup'
    colnames(df) <- df[1,]
    
    # drop the first row:
    df <- df[-1,]
    
  3. ==============================

    3.toDF를 사용하여 새 데이터 프레임을 만들 수도 있습니다.

    toDF를 사용하여 새 데이터 프레임을 만들 수도 있습니다.

    pyspark의 경우 : 스파크 데이터 프레임에서 중복 열 선택 또는 제거

  4. from https://stackoverflow.com/questions/33816481/duplicate-columns-in-spark-dataframe by cc-by-sa and MIT license