窗口函数在 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。

错误说明了一切:

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;

你需要一个支持 hive(使用 hive 构建)的 Spark 版本,而不是声明 hivecontext:

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

然后使用该上下文来执行窗口功能。

在蟒蛇中:

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

您可以在此处进一步了解SQLContextHiveContext之间的区别。

SparkSQL有一个SQLContext和一个HiveContext。HiveContext 是 SQLContext 的超级集合。Spark社区建议使用HiveContext。您可以看到,当您运行交互式驱动程序应用程序 spark-shell 时,它会自动创建定义为 sc 的 SparkContext 和定义为 sqlContext 的 HiveContext。HiveContext 允许你执行 SQL 查询以及 Hive 命令。pyspark 也会发生相同的行为。

相关内容

  • 没有找到相关文章

最新更新