복붙노트

[HADOOP] 창 기능이 Pyspark sqlcontext에서 작동하지 않습니다.

HADOOP

창 기능이 Pyspark sqlcontext에서 작동하지 않습니다.

데이터 프레임이 있으며 7 일 안에 데이터를 롤업하고 일부 기능에 대해 일부 집계를 수행하려고합니다.

나는 같은 pyspark SQL 데이터 프레임을 가지고 ------

Sale_Date|P_1|P_2|P_3|G_1|G_2|G_3|Total_Sale|Sale_Amt|Promo_Disc_Amt  |

|2013-04-10| 1| 9| 1| 1| 1| 1| 1| 295.0|0.0|
|2013-04-11| 1| 9| 1| 1| 1| 1| 3| 567.0|0.0| 
|2013-04-12| 1| 9| 1| 1| 1| 1| 2| 500.0|200.0|   
|2013-04-13| 1| 9| 1| 1| 1| 1| 1| 245.0|20.0| 
|2013-04-14| 1| 9| 1| 1| 1| 1| 1| 245.0|0.0|
|2013-04-15| 1| 9| 1| 1| 1| 1| 2| 500.0|200.0|  
|2013-04-16| 1| 9| 1| 1| 1| 1| 1| 250.0|0.0|  

다음과 같이 데이터 프레임에 창 함수를 적용했습니다.

days = lambda i: i * 86400
windowSp = Window().partitionBy(dataframeOfquery3["P_1"],dataframeOfquery3["P_2"],dataframeOfquery3["P_3"],dataframeOfquery3["G_1"],dataframeOfquery3["G_2"],dataframeOfquery3["G_3"])\
          .orderBy(dataframeOfquery3["Sale_Date"].cast("timestamp").cast("long").desc())\
          .rangeBetween(-(days(7)), 0)

이제 일부 집계를 수행하고자합니다. 즉, 다음과 같은 일부 창 함수를 적용하는 것입니다.

df = dataframeOfquery3.select(min(dataframeOfquery3["Sale_Date"].over(windowSp).alias("Sale_Date")))
df.show()

그러나 다음과 같은 오류가 발생합니다.

py4j.protocol.Py4JJavaError: An error occurred while calling o138.select.
: org.apache.spark.sql.AnalysisException: Could not resolve window function 'min'. Note that, using window functions currently requires a HiveContext;

나는 Hadoop에 미리 만들어진 Apache Spark 1.6.0을 사용하고 있습니다.

해결법

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

    1.오류 종류는 모든 것을 말합니다.

    오류 종류는 모든 것을 말합니다.

    py4j.protocol.Py4JJavaError: An error occurred while calling o138.select.
    : org.apache.spark.sql.AnalysisException: Could not resolve window function 'min'. Note that, using window functions currently requires a HiveContext;
    

    hivecontext를 선언 할 수있는 것보다 하이브 (하이브로 빌드)를 지원하는 spark 버전이 필요합니다.

    val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
    

    그런 다음 해당 컨텍스트를 사용하여 창 기능을 수행하십시오.

    파이썬에서 :

    # sc is an existing SparkContext.
    from pyspark.sql import HiveContext
    sqlContext = HiveContext(sc)
    

    SQLContext와 HiveContext의 차이점에 대한 자세한 내용은 여기를 참조하십시오.

    SparkSQL에는 SQLContext와 HiveContext가 있습니다. HiveContext는 SQLContext의 슈퍼 세트입니다. Spark 커뮤니티는 HiveContext 사용을 제안합니다. 대화 형 드라이버 응용 프로그램 인 spark-shell을 실행하면 sc로 정의 된 SparkContext와 sqlContext로 정의 된 HiveContext가 자동으로 만들어집니다. HiveContext를 사용하면 하이브 명령뿐만 아니라 SQL 쿼리를 실행할 수 있습니다. pyspark에서도 동일한 문제가 발생합니다.

  2. from https://stackoverflow.com/questions/36011843/window-function-is-not-working-on-pyspark-sqlcontext by cc-by-sa and MIT license