窗口函数在pyspark sqlcontext上不起作用

v2g6jxz6  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(479)

我有一个Dataframe,我想把数据汇总成7天,并对一些函数进行聚合。
我有一个pysparksql数据框架,比如------

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|

我在Dataframe上应用了如下窗口函数-

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)

现在我想执行一些聚合,即应用一些windows函数,如下所示--

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的apachespark1.6.0。

vhmi4jdf

vhmi4jdf1#

这个错误说明了一切:

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;

您将需要一个支持配置单元(使用配置单元构建)的spark版本,然后才能声明hivecontext:

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

然后使用该上下文执行窗口功能。
在python中:


# sc is an existing SparkContext.

from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)

你可以进一步了解 SQLContext 以及 HiveContext 在这里。
sparksql有一个sqlcontext和一个hivecontext。hivecontext是sqlcontext的一个超集。spark社区建议使用hivecontext。您可以看到,当您运行sparkshell(这是您的交互式驱动程序应用程序)时,它会自动创建一个定义为sc的sparkcontext和一个定义为sqlcontext的hivecontext。hivecontext允许您执行sql查询和配置单元命令。pyspark也会出现相同的行为。

相关问题