복붙노트

[HADOOP] Spark / Python에서 누락 된 누락 값 전달

HADOOP

Spark / Python에서 누락 된 누락 값 전달

내 Spark 데이터 프레임의 누락 된 값을 이전의 null이 아닌 값 (있는 경우)으로 채우려고합니다. 나는 Python / Pandas에서 이런 유형의 작업을 수행했지만 내 데이터는 팬다 (작은 클러스터에서)에 비해 너무 크고 Spark 멍청이입니다. 스파크가 할 수있는 일인가요? 여러 열에 대해이 작업을 수행 할 수 있습니까? 그렇다면 어떻게? 그렇지 않은 경우 Hadoop 도구 모음 내에서 대체 방법에 대한 제안이 있습니까?

감사!

해결법

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

    1.Windows를 사용하여 추가 코딩없이 작동하는 솔루션을 발견했습니다. Jeff가 맞았습니다. 해결책이 있습니다. 전체 코드 boelow, 나는 그것이 무엇을하는지 간단히 설명 할 것이다. 더 자세한 내용은 블로그를 보라.

    Windows를 사용하여 추가 코딩없이 작동하는 솔루션을 발견했습니다. Jeff가 맞았습니다. 해결책이 있습니다. 전체 코드 boelow, 나는 그것이 무엇을하는지 간단히 설명 할 것이다. 더 자세한 내용은 블로그를 보라.

    from pyspark.sql import Window
    from pyspark.sql.functions import last
    import sys
    
    # define the window
    window = Window.orderBy('time')\
                   .rowsBetween(-sys.maxsize, 0)
    
    # define the forward-filled column
    filled_column_temperature = last(df6['temperature'], ignorenulls=True).over(window)
    
    # do the fill 
    spark_df_filled = df6.withColumn('temperature_filled',  filled_column_temperature)
    

    따라서 아이디어는 항상 실제 행과 이전의 모든 행을 포함하는 데이터를 통해 창 슬라이딩을 정의하는 것입니다.

        window = Window.orderBy('time')\
               .rowsBetween(-sys.maxsize, 0)
    

    시간별로 정렬하므로 데이터의 순서가 정확합니다. 또한 "-sys.maxsize"를 사용하면 창에 항상 이전의 모든 데이터가 포함되고 데이터가 위에서 아래로 이동하면서 계속 증가하지만 더 효율적인 솔루션이있을 수 있습니다.

    "마지막"함수를 사용하여, 우리는 항상 그 윈도우의 마지막 행을 처리합니다. "ignorenulls = True"를 전달하면 현재 행이 null 인 경우 함수가 창에서 가장 최근 (마지막)이 아닌 null 값을 반환하도록 정의합니다. 그렇지 않으면 실제 행의 값이 사용됩니다.

    끝난.

  2. from https://stackoverflow.com/questions/38131982/forward-fill-missing-values-in-spark-python by cc-by-sa and MIT license