Window 函数不适用于 Pyspark sqlcontext
Window function is not working on 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|
我在数据框上应用了一个 window 函数,如下所示 -
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 上预构建的 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 的 spark 版本(使用 hive 构建)而不是你可以声明一个 hivecontext :
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
然后使用该上下文执行您的 window 功能。
在python中:
# 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 查询以及 Hive 命令。 pyspark 也会出现相同的行为。
我有一个数据框,我想将数据汇总为 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|
我在数据框上应用了一个 window 函数,如下所示 -
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 上预构建的 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 的 spark 版本(使用 hive 构建)而不是你可以声明一个 hivecontext :
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
然后使用该上下文执行您的 window 功能。
在python中:
# 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 查询以及 Hive 命令。 pyspark 也会出现相同的行为。