0

データ フレームがあり、データを 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)

今、いくつかの集計を実行したい、つまり、次のようないくつかの 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 を使用しています。

4

1 に答える 1

3

エラーの種類はすべてを言います:

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)

SQLContextHiveContext ここの違いについて詳しく読むことができます。

SparkSQL には SQLContext と HiveContext があります。HiveContext は、SQLContext のスーパー セットです。Spark コミュニティは、HiveContext の使用を提案しています。対話型ドライバー アプリケーションである spark-shell を実行すると、sc として定義された SparkContext と sqlContext として定義された HiveContext が自動的に作成されることがわかります。HiveContext を使用すると、SQL クエリと Hive コマンドを実行できます。pyspark でも同じ動作が発生します。

于 2016-03-15T12:54:29.823 に答える