如何在 spark 的 HiveQL 中应用 Windows 函数

how to apply Windows function in HiveQL in spark

我看过讨论 的帖子。但我有一些问题。

  1. 因为只能在HiveContext中使用。如果我已经在使用 SparkSQLContext,我该如何在 SparkSQLContext 和 HiveContext 之间切换?
  2. 这里怎么可能 运行 使用 windows 函数的 HiveQL?我试过了

    df.registerTempTable("data")
    from pyspark.sql import functions as F
    from pyspark.sql import Window
    

    %%hive
    SELECT col1, col2, F.rank() OVER (Window.partitionBy("col1").orderBy("col3") 
    FROM data
    

和原生 Hive SQL

SELECT col1, col2, RANK() OVER (PARTITION BY col1 ORDER BY col3) FROM data

但它们都不起作用。

How can i switch between SparkSQLContext and HiveContext given i am already using SparkSQLContext?

你不能。 Spark 数据框和表绑定到特定上下文。如果你想用HiveContext那就一直用吧。反正你拖了所有的依赖。

How is that possible to run a HiveQL using windows function here

sqlContext = ...  # HiveContext 
sqlContext.sql(query)

您使用的第一个查询根本无效。如果您使用正确的上下文和配置,第二个应该可以工作。