ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spark] 컬럼명 대소문자 구분 (case-sensitive) 옵션
    Open Source/Spark 2020. 10. 14. 16:24
    반응형

    spark version: 2.4.4

    spark 은 기본 설정으로 컬럼명의 대소문자를 구분하지 않고 선택을 할 수 있다.

     

    옵션의 이름은 spark.sql.caseSensitive 로 기본 값은 False 이다.

    이 때는 아래의 코드와 같이 컬럼명이 대소문자만 다른 문자열로 되어 있는 경우, 하나의 컬럼만 특정하여 선택이 불가능하다.

    df = spark.createDataFrame([{'ABC': 1, 'abc': 2}])
    df.show()
    
    '''
    output:
    +---+---+
    |ABC|abc|
    +---+---+
    |  1|  2|
    +---+---+
    '''
    
    df.select('ABC').show()
    
    '''
    output:
    Traceback (most recent call last):
        ...
    pyspark.sql.utils.AnalysisException: "Reference 'ABC' is ambiguous, could be: ABC, ABC.;"
    '''

     

    대소문자를 구분하여 각각의 컬럼을 선택하고자 할때는 해당 옵션을 True 로 설정 해야 한다.

     

    df = spark.createDataFrame([{'ABC': 1, 'abc': 2}])
    df.show()
    
    '''
    output:
    +---+---+
    |ABC|abc|
    +---+---+
    |  1|  2|
    +---+---+
    '''
    
    spark.conf.set('spark.sql.caseSensitive', True)
    df.select('ABC').show()
    
    '''
    output:
    +---+
    |ABC|
    +---+
    |  1|
    +---+
    '''
    
    df.select('abc').show()
    
    '''
    output:
    +---+
    |abc|
    +---+
    |  2|
    +---+
    '''
    
    df.select('Abc').show()
    
    '''
    output:
    Traceback (most recent call last):
        ...
    pyspark.sql.utils.AnalysisException: "cannot resolve '`Abc`' given input columns: [ABC, abc];;\n'Project ['Abc]\n+- LogicalRDD [ABC#39L, abc#40L], false\n"
    '''

     

    반응형

    댓글

Designed by Tistory.