Sparkデータフレームから列とレコードを削除

10787 ワード

Sparkデータフレームのカラムとレコードの削除


サマリ
  • 版dasデータフレームはdrop()メソッドのaxisパラメータ(0はlow,1はcolumn)であり、lowとcolumnを同時に削除できるが、Spark Dataframeのdrop()メソッドはcolumnのみを削除できる.
  • Sparkデータフレームのdrop()メソッドでは、1つまたは複数のカラムを削除できますが、複数のカラムを削除する場合はlistを入力することはできません.単一のカラムを入力する必要があります.
  • Sparkデータフレームは特定の条件に従ってLowを削除することが困難であるため、削除ではなくfilter()メソッドを用いて、その条件に合致しないLowをフィルタリングして返す.
  • PandasのNone値はNullで、Sparkはnullに変換します.値はdropna()メソッドまたはDataFrameです.na.drop()を使用して削除できます.あるいは、filter()条件でNot null条件を使用して再生成することもできます.
  • DataFrame.naはDataFrameNaFunctionsオブジェクトです.
  • a.ファンダスのdrop()

  • ワークショップ:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html2
  • 版dasのdrop()はaxis因子でlowとcolumnを削除できます
  • pandas(axis=0, how='any', thresh=None, subset=None, inplace=False)
  • ## axis = 0 (로우), axis = 1 (컬럼)
    titanic_pdf_dropped = titanic_pdf.drop('Name', axis=1, inplace=False)
    display(titanic_pdf_dropped.head())
    display(titanic_pdf.head())

    b.火花滴()-基本的な使い方


  • 参照:https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.DataFrame.drop.html2

  • 単一のカラム名またはcol()形式のカラム名を入力して配置

  • 注意カラムが存在しなくてもエラーが発生しない点
  • ## 라이브러리 로드 
    from pyspark.sql.functions import col
    
    ## copy로 받기 
    titanic_sdf_copied = titanic_sdf.select('*')
    
    ## 단일 컬럼 삭제. 
    ## drop() 메소드 인자로 단일 컬럼명 문자열, 또는 컬럼명 컬럼형을 입력. 
    titanic_sdf_copied = titanic_sdf_copied.drop('Name')
    titanic_sdf_copied = titanic_sdf_copied.drop(col('Sex'))
    
    titanic_sdf_copied.limit(10).show(truncate=False)

    c.複数の列を削除する

  • 複数のカラムを削除する場合はlistではなく独立したカラム名を入力します.
  • の複数の列を削除する場合、柱係数
  • は使用できません.
  • 個以上の列を削除した場合、listを入力できません
  • *をリストの下のパラメータとして、列
  • を削除できます.
    from pyspark.sql.functions import col
    
    ## 여러개의 컬럼을 삭제할 시 list가 아니라 단일 컬럼명들을 각각 인자로 넣어 주어야 함. 
    titanic_sdf_copied.drop('Age', 'SibSp').limit(10).show()
    
    ## 아래는 오류 발생. 여러개의 컬럼들을 삭제 시 컬럼형 인자는 안됨.  
    titanic_sdf_copied.drop(col('Age'), col('SibSp')).limit(10).show()
    
    ## 아래는 오류 발생. 여러개의 컬럼들을 삭제 시 list 입력은 안됨.  
    titanic_sdf_copied.drop(['Age', 'SibSp']).limit(10).show()
    
    ## *으로 받아서, 수행 
    drop_columns = ['Age', 'SibSp']
    drop_columns_col = [col('Age'), col('SibSp')]
    
    titanic_sdf_copied.drop(*drop_columns).limit(10).show()
    
    ## 하지만 아래는 여전히 오류를 발생 시킴. 
    titanic_sdf_copied.drop(*drop_columns_col).limit(10).show()

    d.特定の条件を満たす列を削除()

  • 論理は、複数の条件を満たす列
  • を削除することができる.
  • dropna、dropはサブセットであり、一部のカラムにnullがある場合にのみ
  • を削除できます.
    ## 타입 확인 
    titanic_sdf_copied.dtypes
    
    # 아래와 같이 logic으로 조건에 맞는 여러개의 컬럼들을 삭제할 수 있음. 
    drop_string_columns = [ column_name for column_name, column_type in titanic_sdf_copied.dtypes if column_type == 'string']
    print('drop 컬럼명:', drop_string_columns)
    titanic_sdf_copied.drop(*drop_string_columns).limit(10).show()
    
    # Spark DataFrame은 특정 조건으로 로우를 삭제하기가 어려우므로 filter()로 특정 조건에 해당하지 않는 로우를 걸러내는 방식을 적용. 
    titanic_sdf_removed_Embarked_C = titanic_sdf.filter(col('Embarked') != 'C')
    titanic_sdf_removed_Embarked_C.show()